2014-09-02 4 views
1

Я использую Kubuntu 14.04 и установили библиотеку FreeImage сКак я могу ссылаться на FreeImage?

sudo apt-get install libfreeimage-dev 

Насколько я могу сказать, что он установлен правильно, с FreeImage.h в /usr/include и libfreeimage.a в /usr/lib. Однако эта тривиальная программа C

#include <FreeImage.h> 

int main(int argc, char **argv) { 

    FreeImage_Initialise(FALSE); 
    FreeImage_DeInitialise(); 
    return 0; 

} 

не удается скомпилировать. Запуск

gcc -lfreeimage fitest.c -o fitest 

выходы

/tmp/ccFbb0HQ.o: In function `main': 
fitest.c:(.text+0x15): undefined reference to `FreeImage_Initialise' 
fitest.c:(.text+0x1a): undefined reference to `FreeImage_DeInitialise' 
collect2: error: ld returned 1 exit status 

Что я делаю неправильно?

+0

Проверьте капитализацию. – Mario

+0

Это немного странно, потому что когда я скопирую ваш код точно и скомпилирую его с той же командой, с установленным 'libfreeimage-dev', он отлично компилируется. – Dolda2000

+2

Вы упомянули 'libfreeimage.a' вместо' libfreeimage.so', с которым вы обычно связывались бы. Для этого есть причина? Вы как-то явно пытаетесь связать свою программу статически или что-то (и почему это не показано в вашей команде компиляции, в этом случае)? * Правильно ли установлен '' libfreeimage.so'? – Dolda2000

ответ

3

Обычно это не относится к совместно используемым библиотекам, а только к статическим, но я все равно дам ему шанс, так как он соответствует вашим симптомам, а также упоминается libfreeimage.a вместо libfreeimage.so, что указывает на то, re пытается использовать статическую библиотеку.

При связывании от статических библиотек, вам необходимо предоставить аргументы библиотеки после источника явно выраженного/объектных аргументы компилятора, так как компилятор будет обрабатывать еще неразрешенные символы из библиотеки:

gcc -o fitest fitest.c -lfreeimage 

Если вы даете аргумент статической библиотеки перед любыми аргументами источника/объекта, то никакие символы еще не будут решены, из библиотеки ничего не будет выбрано, а в конце символы будут рассматриваться как неразрешенные.

+0

Аааа, спасибо! Все работает :) –

+0

Ах, поиск немного подтвердил, почему он работал для меня (на Debian (но не для вас (на Ubuntu). [Этот ответ] (http://stackoverflow.com/questions/7826448/linking -libraries-with-gcc-order-of-arguments) содержит секрет. – Dolda2000

 Смежные вопросы

  • Нет связанных вопросов^_^