Ubuntu 11.10: GCC / G ++ не будет связывать библиотеки - PullRequest
7 голосов
/ 14 декабря 2011

Я пошел, чтобы скомпилировать мой проект, который использует SDL, SDL_ttf, OpenAL и GTK.Все из которых выводят ошибки, подобные следующим:

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 --libs pkg-config gtk+-2.0 --libs pkg-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

У кого-нибудь есть идеи?

Ответы [ 3 ]

13 голосов
/ 14 декабря 2011

Как правило, вам нужно иметь опции -l после файлов, которые используют символы в командной строке.Возможно, попробуйте переместить sdl-config --libs --cflags в конец команды?т.е. для вашей тестовой программы:

g++ -o sdl-test ./sdl-test.cpp `sdl-config --libs --cflags`
1 голос
/ 08 августа 2014

Гах, какой придурок получил идею сменить компилятор, чтобы теперь полагаться на порядок опций в командной строке?

Что ж, это тоже исправило мою проблему, просто переместился ($ CFLAGS) после ($ OBJS) в мой Makefile, и все мои проблемы с ссылками с неизвестными ссылками на библиотеки SDL исчезли>. <</p>

0 голосов
/ 07 августа 2013

Если вы используете SDL_ttf, вам нужно

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