我写了一个如下的makefile:
COMPILER = g++
COMPILER_FLAGS = -c -g -O0 -Wall -w
EXEC=mhu9_mp3
LD = g++
LINKER = g++
mhu9_mp3 : mhu9_mp3.o teapot.o EasyBMP.o
$(LD) teapot.o mhu9_mp3.o EasyBMP.o -L./SOIL/lib -lSOIL -o mhu9_mp3 -L./usr/lib -lGL -lGLU -lglut -lGLEW
teapot.o : teapot.cpp teapot.h
$(COMPILER) $(COMPILER_FLAGS) teapot.cpp
mhu9_mp3.o : mhu9_mp3.cpp teapot.h
$(COMPILER) $(COMPILER_FLAGS) mhu9_mp3.cpp
EasyBMP.o : EasyBMP_1.06/EasyBMP.cpp
$(COMPILER) $(COMPILER_FLAGS) EasyBMP_1.06/EasyBMP.cpp
clean:
-rm -f *.o mhu9_mp3
哪里libSOIL.a
是静态库(我使用“ -L./SOIL/lib -lSOIL
”链接它)和 -lGL -lGLU -lglut -lGLEW 是动态库。我已将它们连接在同一行。在我的 cpp 文件中,我有一个调用 SOIL.h 中定义的函数的函数调用。但是,当我编译时出现此错误:
undefined reference to `SOIL_load_image'
我很确定我已经包含了头文件SOIL.h
,并且我已经链接到了静态库libSOIL.a
中。那么这个错误的原因是什么?我尝试-static
在之前添加一个标志,-lSOIL
但链接器错误地假设其他动态库是静态的。有没有更好的方法同时链接静态库和动态库?