makefile:未创建可执行文件
makefile: no executable created
我以前使用过带有glut的openGL,以前单独使用过SDL2。现在我尝试用Glew、SDL2和OpenGL制作一个优化的项目。我希望它能够在Linux(我主要使用Debian)、OSX和Windows上运行。所以我试着写我自己的makefile。这段代码应该只为我创建一个窗口。我在osx上开发。
我只有我的main.cpp、Display.cpp和Display.h
这就是我尝试的:
#my compiler
CC=g++
#my program name
PRGNAME=booom
#library search directory
LIBDIR=-L/usr/lib -L/usr/local/lib
#library names
#uses libSDL.a, libGLEW.a
LIBNAME=-lSDL -lGLEW
#includes for libraries
INCLUDES=-I/usr/include -I/usr/local/include
#my compiler options
CFLAGS=-c -Wall
all: main.o Display.o
$(CC) $(CFLAGS) $(INCLUDES) $(LIBDIR) $(LIBNAME) -o $(PRGNAME) main.o Display.o
#main.cpp is the dependency of main.o
main.o: main.cpp
$(CC) $(CFLAGS) $(INCLUDES) $(LIBDIR) $(LIBNAME) main.cpp
Display.o: Display.cpp
$(CC) $(CFLAGS) $(INCLUDES) $(LIBDIR) $(LIBNAME) Display.cpp
clean:
rm -rf *o booom
我得到了一个main.o和一个Display.o文件,但我没有得到一个可执行文件。
当我做"使干净&&使"这是我的输出:
macbook-mehrschwein:Booom Mehrschwein$ make clean && make
rm -rf *o booom
g++ -c -Wall -I/usr/include -I/usr/local/include -L/usr/lib -L/usr/local/lib -lSDL -lGLEW main.cpp
clang: warning: -lSDL: 'linker' input unused
clang: warning: -lGLEW: 'linker' input unused
clang: warning: argument unused during compilation: '-L/usr/lib'
clang: warning: argument unused during compilation: '-L/usr/local/lib'
g++ -c -Wall -I/usr/include -I/usr/local/include -L/usr/lib -L/usr/local/lib -lSDL -lGLEW Display.cpp
clang: warning: -lSDL: 'linker' input unused
clang: warning: -lGLEW: 'linker' input unused
clang: warning: argument unused during compilation: '-L/usr/lib'
clang: warning: argument unused during compilation: '-L/usr/local/lib'
g++ -c -Wall -I/usr/include -I/usr/local/include -L/usr/lib -L/usr/local/lib -lSDL -lGLEW -o booom main.o Display.o
clang: warning: -lSDL: 'linker' input unused
clang: warning: -lGLEW: 'linker' input unused
clang: warning: main.o: 'linker' input unused
clang: warning: Display.o: 'linker' input unused
clang: warning: argument unused during compilation: '-Wall'
clang: warning: argument unused during compilation: '-I /usr/include'
clang: warning: argument unused during compilation: '-I /usr/local/include'
clang: warning: argument unused during compilation: '-L/usr/lib'
clang: warning: argument unused during compilation: '-L/usr/local/lib'
macbook-mehrschwein:Booom Mehrschwein$
问题出在所有阶段中使用的-c
标志中。它意味着编译一个对象文件,而不是链接。为all
目标删除它。类似:
all: main.o Display.o
$(CC) $(LIBDIR) $(LIBNAME) -o $(PRGNAME) main.o Display.o
这修复了链接的问题。现在,请确保您指定的文件夹中有libSDL。
带有的新版本
all: main.o Display.o
$(CC) $(LIBDIR) $(LIBNAME) -o $(PRGNAME) main.o Display.o
main.o: main.cpp
$(CC) $(CFLAGS) $(INCLUDES) main.cpp
Display.o: Display.cpp
$(CC) $(CFLAGS) $(INCLUDES) Display.cpp
不再对Display.o和main.o发出警告。
我现在得到的错误:
g++ -c -Wall -I/usr/include -I/usr/local/include main.cpp
g++ -c -Wall -I/usr/include -I/usr/local/include Display.cpp
g++ -Wall -I/usr/include -I/usr/local/include -L/usr/lib -L/usr/local/lib -o booom main.o Display.o -lSDL -lGLEW
ld: library not found for -lSDL
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [all] Error 1
编辑:名称是libSDL2.a,而不是libSDL.a
但现在它告诉我他找不到libGlew
libGLEW.a在/usr/lib中
libSDL2.a位于/usr/local/lib 中
它们需要在同一个目录中吗?
第2版:
更新
我更改了一些内容,现在我将GLEW构建为"/usr/local",因此所有内容都在同一目录中。
我的makefile:
#my compiler
CC=g++
#my program name
PRGNAME=booom
#library search directory
LIBDIR=-L/usr/local/lib
#library names
#uses libSDL2.a, libGLEW.a
LIBNAME=-lSDL2 -lGLEW
#includes for libraries
INCLUDES=-I/usr/local/include
#my compiler options
CFLAGS=-c -Wall
all: main.o Display.o
$(CC) $(LIBDIR) $(LIBNAME) -o $(PRGNAME) main.o Display.o
#main.cpp is the dependency of main.o
main.o: main.cpp
$(CC) $(CFLAGS) $(INCLUDES) main.cpp
Display.o: Display.cpp
$(CC) $(CFLAGS) $(INCLUDES) Display.cpp
clean:
rm -rf *o booom
我现在的错误:
rm -rf *o booom
g++ -c -Wall -I/usr/local/include main.cpp
g++ -c -Wall -I/usr/local/include Display.cpp
g++ -L/usr/local/lib -lSDL2 -lGLEW -o booom main.o Display.o
Undefined symbols for architecture x86_64:
"_glClear", referenced from:
Display::Clear(float, float, float, float) in Display.o
"_glClearColor", referenced from:
Display::Clear(float, float, float, float) in Display.o
"_glCullFace", referenced from:
Display::Display(int, int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in Display.o
"_glEnable", referenced from:
Display::Display(int, int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in Display.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [all] Error 1
seams,比如我有一个32位版本,而我需要一个64位版本,但我已经自己构建了,我真的不知道自己做错了什么。通常你也要做一些类似的事情/在构建之前进行配置。但是没有GLEW的配置。我在谷歌上找到的唯一解决方案涉及macports,但我很想在没有macports的情况下完成
相关文章:
- 从 PHP 调用已编译的C++可执行文件来创建套接字
- Pyinstaller创建的可执行文件找不到Meipass目录中存在的DLL
- 配置:错误:C++编译器无法创建可执行文件
- catkin_make无法创建可执行文件,并自动将标题文件复制到DEVEL
- 如何转换一个普通的makefile以创建可以在另一台计算机上使用的静态可执行文件
- 在Eclipse(Ubuntu)创建C Makefile项目时,如何生成.bin(可执行文件)
- 可执行文件无法在双击执行时创建新文件
- 程序如何创建另一个可执行文件
- 创建不需要任何进一步安装即可在其他计算机上工作的可执行文件?
- 如何在带有C++的Visual Studio 2013中创建可执行文件
- CMake没有创建可以访问我的共享库的可执行文件
- makefile:未创建可执行文件
- 系统调用 open() 创建可执行文件
- 如何在 Ubuntu 上运行由 Code::Blocks 创建的可执行文件
- IDE 如何创建可执行文件
- GCC 和 binutils build - C 编译器无法创建可执行文件
- 如何创建生成文件,为对象和可执行文件指定不同的目录
- 无法从使用 Cmake 创建的可执行文件中删除符号名称
- 具有多个目标的生成文件,并创建一个包含可执行文件的目录
- 如何为刷新ROM创建C++可执行文件