与libtool静态链接,无需修改.la文件中的dependency_libs

时间:2014-01-28 14:13:08

标签: static-libraries libtool

在一个基于autotools的项目中,我正在捆绑另一个小的静态库,并以安全的方式将它链接到我的最终共享库(静态是用-fPIC等构建的)最后应该没有证据在内部静态库的存在作为构建过程的一部分,其符号应全部“复制”到共享库中。

确实满足最后一个条件,使用nm进行检查,并在共享库上使用ldd显示静态库上没有“必需”的ELF部分依赖性。但libtool的.la存档文件是另一回事:那里的dependency_libs变量选择-lmy-secret-temp-lib(名称已被更改以保护无辜)条目,然后打破任何基于libtool的项目尝试构建最终库,因为永远不会满足依赖。非libtool项目当然没有问题,因为libtool只能在.la个文件中查找。

有什么方法可以告诉libtool在dependency_libs变量中包含.la变量时,xxxx_la_LIBADD文件中的-flibtool_ignore -lmy-secret-lib -flibtool_payattention变量不添加库?也许有一些像.la之类的前后args允许开发人员告诉libtool不要阻止它?很高兴能够告诉autotools / libtool根本不制作/安装{{1}}文件,但这似乎不是一个选择!

1 个答案:

答案 0 :(得分:2)

这是我们为后人找到的最佳解决方案:

似乎没有非常简洁的方法让这个工作。我发现最好的是在“内部”链接时避免使用-L-l标志,而是直接将$(builddir)/extralib/libmy-secret-lib.a放入最终共享库的LDFLAGS / LIBADD变量中

遗憾的是,这产生了一个关于不可移植性的libtool警告以及使用-fPIC构建“手工制作的便利库”的必要性 - 即使它已经构建了这种方式而且是完全便携。遗憾的是,...LIBTOOLFLAGS = --silent还不足以隐藏那个哭泣的警告,但结果很好:所需的符号被复制到最终的库中,dependency_libs未被删除,没有黑客(如下所示:{{3} }})required。