1

我正在使用 Kubuntu 14.04,并安装了 FreeImage 库

sudo apt-get install libfreeimage-dev

据我所知,它已正确安装,带有FreeImage.hin/usr/includelibfreeimage.ain /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

我究竟做错了什么?

4

1 回答 1

4

共享库通常不会出现这种情况,而只有静态库,但无论如何我都会试一试,因为它符合您的症状,而且您还提到libfreeimage.a了而不是libfreeimage.so,表明您正在尝试使用静态图书馆。

链接静态库时,您需要在显式源/对象参数之后将库参数提供给编译器,因为编译器只会处理库中尚未解析的符号:

gcc -o fitest fitest.c -lfreeimage

如果您在任何源/对象参数之前给出静态库参数,那么,还没有未解析的符号,不会从库中挑选任何内容,并且符号最终将被视为未解析。

于 2014-09-02T22:27:11.167 回答