【问题标题】:How do I link to FreeImage?如何链接到 FreeImage?
【发布时间】:2014-09-02 22:12:08
【问题描述】:

我使用的是 Kubuntu 14.04,并安装了 FreeImage 库

sudo apt-get install libfreeimage-dev

据我所知,它已正确安装,/usr/include 中的FreeImage.h/usr/lib 中的libfreeimage.a。然而,这个琐碎的 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

我做错了什么?

【问题讨论】:

  • 检查大小写。
  • 这有点奇怪,因为当我完全复制粘贴您的代码并使用相同的命令编译它并安装libfreeimage-dev 时,它编译得非常好。
  • 您提到libfreeimage.a 而不是libfreeimage.so,您通常会实际链接到它。是否有一个原因?您是否以某种方式明确地尝试静态链接您的程序或其他东西(在这种情况下,为什么在您的编译命令中没有显示)? 是否 libfreeimage.so 正确安装?

标签: c freeimage


【解决方案1】:

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

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

gcc -o fitest fitest.c -lfreeimage

如果您在任何源/对象参数之前提供静态库参数,则不会有未解析的符号,也不会从库中挑选任何内容,而这些符号最终将被视为未解析。

【讨论】:

  • 啊,四处搜索确认了为什么它对我有用(在 Debian 上(但不适合你(在 Ubuntu 上)。This answer 掌握着这个秘密。
猜你喜欢
  • 1970-01-01
  • 2012-12-19
  • 2017-06-27
  • 2013-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-20
相关资源
最近更新 更多