【发布时间】:2017-10-17 21:58:01
【问题描述】:
我正在尝试静态编译fbi(Linux framebuffer imageviewer),所以我在GNUMakefile 中将-static 添加到LDFLAGS。没有-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 中,根据here 找到的源代码,我用nm libxml2.a 进行了校对。
我想我必须告诉GNUMakefile 中的链接器到底要做什么,但是怎么做呢? ar 库中的目标代码都是 ARM 32 位的,我正在 ARM 32 位上编译和链接。
GNUMakefile 可以找到here,我加了LDFLAGS += -static --verbose -lfontconfig -lfreetype -lpng12 -ltiff。
【问题讨论】:
-
请注意您的图书馆 order 可能很重要。如果没有完整的链接行,我们将无法为您提供帮助。
-
@tofro 你说得对,我添加了信息。
-
当您执行
nm libxml2.a时,它是否将XML_GetCurrentLineNumber显示为在那里定义的函数? -
@MaximEgorushkin 不,但是
xmlSAX2GetLineNumber将XML_GetCurrentLineNumber定义为here。 -
@JohnnyFromBF 哦,链接器错过了
XML_GetCurrentLineNumber。而libxml2.a提供xmlSAX2GetLineNumber。除非两个函数具有相同的名称,否则这不会链接。libfontconfig.a应使用xmlSAX2GetLineNumber或libxml2.a必须定义XML_GetCurrentLineNumber。