Fui a compilar un proyecto mío, que usa SDL, SDL_ttf, OpenAL y GTK. Todos los cuales están produciendo errores como los siguientes:Ubuntu 11.10: GCC/G ++ no vinculará bibliotecas
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'
para cada llamada a la biblioteca. Estoy compilando con las siguientes opciones de enlace:
sdl-config --libs
pkg-config gtk+-2.0 --libs
pkg-config openal --libs
-lalut -lSDL_ttf
tengo todos estos paquetes instalados y no hay errores "Archivo no encontrado". Sólo un montón de referencias indefinidas ... No tenía sentido, así que escribió una aplicación de prueba rápida:
#include "SDL/SDL.h"
int main()
{
SDL_Init(SDL_INIT_VIDEO);
return 0;
}
y compilar este modo:
g++ `sdl-config --libs --cflags` -o sdl-test ./sdl-test.cpp
Incluso he intentado vincular directamente a "/usr/lib/libSDL-1.2.so.0" o "/usr/lib/libSDL.a" en lugar
todas estas opciones terminar con el mismo resultado:
/tmp/cc05XT8U.o: In function `main':
sdl-test.cpp:(.text+0xa): undefined reference to `SDL_Init'
collect2: ld returned 1 exit status
¿Alguien tiene alguna idea?
OP también puede leer esta explicación de por qué el orden de las bibliotecas en línea de comandos es importante: http://webpages.charter.net/ppluzhnikov/linker.html –
¡Eso fue todo! ¡Gracias! ¡Supongo que nunca supe que importaba y que siempre acababa de escribirlo correctamente! Ruso empleado: ¡Sí, eso tiene mucho sentido! ¡Gracias de nuevo chicos! – Caleb1994