我正在尝试静态编译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
。
答案 0 :(得分:0)
当构建共享库时,它经常链接所需的其他共享库。
静态库无法链接其他库,因此在链接到该静态库时,其依赖关系也必须明确链接。
换句话说,你不能只是撒上-static
并期望它仍然链接。
尝试链接libxml2.a
和其他缺少的库,直到它链接:
LDFLAGS += -static --verbose -lfontconfig -lfreetype -lpng12 -ltiff -lxml2