Sono andato a compilare un mio progetto che utilizza SDL, SDL_ttf, OpenAL e GTK. Tutti questi errori vengono visualizzati come segue:Ubuntu 11.10: GCC/G ++ non collegherà le librerie
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'
per ogni chiamata di libreria. Sto compilazione con le seguenti opzioni di collegamento:
sdl-config --libs
pkg-config gtk+-2.0 --libs
pkg-config openal --libs
-lalut -lSDL_ttf
ho tutti questi pacchetti installati, e non ci sono errori "File non trovato". Solo un sacco di riferimenti indefiniti ... Non aveva senso, così ho scritto una rapida applicazione di test:
#include "SDL/SDL.h"
int main()
{
SDL_Init(SDL_INIT_VIDEO);
return 0;
}
e compilare in questo modo:
g++ `sdl-config --libs --cflags` -o sdl-test ./sdl-test.cpp
Ho anche provato che collega direttamente a "/usr/lib/libSDL-1.2.so.0" o "/usr/lib/libSDL.a" invece
tutte queste opzioni finire con la stessa uscita:
/tmp/cc05XT8U.o: In function `main':
sdl-test.cpp:(.text+0xa): undefined reference to `SDL_Init'
collect2: ld returned 1 exit status
Qualcuno ha qualche idea?
OP potrebbe voler leggere anche questa spiegazione del motivo per cui l'ordine delle librerie sulla riga di comando è importante: http://webpages.charter.net/ppluzhnikov/linker.html –
È stato! Grazie! Immagino di non averlo mai capito, e mi è sempre capitato di scriverlo correttamente! Russo impiegato: Sì, questo ha molto senso! Grazie ancora ragazzi! – Caleb1994