链接器无法在其他静态库中查找函数

时间:2017-05-18 07:53:56

标签: c gcc linker gnu-make ld

我正在尝试静态编译fbi(Linux framebuffer imageviewer),因此我在-static中将LDFLAGS添加到GNUMakefile。没有-static链接工作完美。启用后,我会收到各种链接错误,告诉我:

/usr/lib/gcc/arm-linux-gnueabihf/4.9/../../../arm-linux-gnueabihf/libfontconfig.a(fcxml.o): In function 'FcConfigMessage': (.text+0x192): undefined reference to 'XML_GetCurrentLineNumber'

现在我确实拥有静态库libfontconfig.a,并且显然找不到的函数XML_GetCurrentLineNumber位于/usr/lib/gcc/arm-linux-gnueabihf/4.9/../../../arm-linux-gnueabihf/libxml2.a,我使用nm libxml2.a进行了验证,根据来源找到代码here

我想我必须告诉GNUMakefile中的链接器到底该做什么,但是怎么做? ar库中的目标代码都是ARM 32位,我在ARM 32位上进行编译和链接。

可以找到GNUMakefile here,我添加了LDFLAGS += -static --verbose -lfontconfig -lfreetype -lpng12 -ltiff

1 个答案:

答案 0 :(得分:0)

当构建共享库时,它经常链接所需的其他共享库。

静态库无法链接其他库,因此在链接到该静态库时,其依赖关系也必须明确链接。

换句话说,你不能只是撒上-static并期望它仍然链接。

尝试链接libxml2.a和其他缺少的库,直到它链接:

LDFLAGS += -static --verbose -lfontconfig -lfreetype -lpng12 -ltiff -lxml2