次のようなメイクファイルを作成しました。
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
wherelibSOIL.a
は静的ライブラリ (" -L./SOIL/lib -lSOIL
" を使用してリンクしました) で、 -lGL -lGLU -lglut -lGLEW は動的ライブラリです。私はそれらを同じ行にまとめました。私の cpp ファイルには、 SOIL.h で定義された関数を呼び出す関数呼び出しがあります。ただし、コンパイルすると、次のエラーが発生しました。
undefined reference to `SOIL_load_image'
SOIL.h
ヘッダー ファイルをインクルードしたことと、スタティック ライブラリにリンクしたことは確かですlibSOIL.a
。では、このエラーの理由は何ですか? -static
の前にフラグを追加しようとしました-lSOIL
が、リンカーは他の動的ライブラリが静的であると誤って想定しています。静的ライブラリと動的ライブラリを同時にリンクするより良い方法はありますか?