我正在尝试构建一个依赖于二进制分布式静态库的项目。
链接器抱怨它找不到ini_config
函数,其中包括:
config_params.c:(.text+0x16f): undefined reference to `ini_get_config_valueobj'
它找到了动态库,但没有找到静态版本:
attempt to open /usr/lib/gcc/x86_64-linux-gnu/7/libini_config.a failed
attempt to open /usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/libini_config.so succeeded
这些文件在 debian stretch 上存在。有没有办法在 ubuntu 上也获取它们?
答案1
所有软件包似乎都安装了它们的静态库。它们可以在 中找到/usr/lib/x86_64-linux-gnu
。
显然,使用时,链接器会首先选择动态库-lsomelib
。要覆盖这一点,可以使用-l:libsomelib.a
,然后它将仅匹配确切的文件名somelib.a
。使用-L/usr/lib/x86_64-linux-gnu
与“链接”动态库相同的方法。
要调试库搜索阶段,您可以将 添加-Wl
到--verbose
。LDFLAGS
然后gcc
将显示它为您的-lXXX
选项尝试的每条路径。
请记住,档案仅检查一次,如这个答案,如果仍然找不到某些符号,则可能必须重新排序参数。