2011-12-14 19 views
7

SDL、SDL_ttf、OpenAL、およびGTKを使用する私のプロジェクトをコンパイルしました。次のようなエラーが出力されます。Ubuntu 11.10:GCC/G ++はライブラリをリンクしません

TxtFunc.cpp:(.text+0x61): undefined reference to `TTF_OpenFont' 
TxtFunc.cpp:(.text+0x8c): undefined reference to `TTF_RenderText_Solid' 
TxtFunc.cpp:(.text+0xf6): undefined reference to `SDL_UpperBlit' 
TxtFunc.cpp:(.text+0x108): undefined reference to `TTF_CloseFont' 
TxtFunc.cpp:(.text+0x114): undefined reference to `SDL_FreeSurface' 

すべてのライブラリ呼び出し。私は、以下のリンクオプションでコンパイルしています:

sdl-config --libspkg-config gtk+-2.0 --libspkg-config openal --libs -lalut -lSDL_ttf

私がインストールされ、これらのすべてのパッケージを持って、そして何の「ファイルが見つかりません」というエラーはありません。未定義の参照のちょうどたくさん...それは意味がありませんでしたので、私は簡単なテストアプリケーションを書いた:

#include "SDL/SDL.h" 

int main() 
{ 
    SDL_Init(SDL_INIT_VIDEO); 
    return 0; 
} 

などのようにコンパイル:

g++ `sdl-config --libs --cflags` -o sdl-test ./sdl-test.cpp 

私も直接リンクしようとしています「/usr/lib/libSDL-1.2.so.0」または代わり

「/usr/lib/libSDL.a」これらのオプションのすべてに同じ出力で終わる:

/tmp/cc05XT8U.o: In function `main': 
sdl-test.cpp:(.text+0xa): undefined reference to `SDL_Init' 
collect2: ld returned 1 exit status 

誰にもアイデアはありますか?

答えて

13

通常、コマンドラインでシンボルを使用するファイルの後に、の後に-lオプションを付ける必要があります。おそらくsdl-config --libs --cflagsをコマンドの最後に移動してみてください。あなたのテストプログラムのためのすなわち:

あなたがSDL_ttfを使用する場合は
g++ -o sdl-test ./sdl-test.cpp `sdl-config --libs --cflags` 
+3

OPでは、コマンドラインでのライブラリの順序が重要な理由について、この説明を読むこともできます。http://webpages.charter.net/ppluzhnikov/linker.html –

+0

それでした。ありがとう!私はそれが重要であることを知らなかったと思うし、ちょうどいつもそれを正しく書いたことがあった! 雇用ロシア語:うん、それは意味をなさない! もう一度ありがとう! – Caleb1994

0

、あなたが必要

g++ main.cpp -o sdl-test `sdl-config --libs --cflags` -lSDL_ttf 
1

のオプションの順序に今頼るようにコンパイラを変更するためにアイデアを得たpillock GAH、コマンドライン?

私の問題も解決しました。私のMakefileの($ OBJS)の後に移動しました。そして、SDLライブラリへの未知の参照に関する私のリンクの問題はすべて消えました。 <

関連する問題