是否可能使用libtool将一些库静态链接,但不是全部链接?

6
我正在处理一个项目,该项目使用autoconf、automake和libtool构建。该项目以二进制和源代码形式分发。
在Linux上,默认情况下,构建脚本链接到所有库动态地。这是有道理的,因为Linux用户可以依赖于他们的发行版软件包管理器来处理依赖关系。
在Windows上,默认情况下,构建脚本使用libtool的-all-static选项静态地链接到所有库。这是有道理的,因为Windows没有提供任何依赖项,并且将所有依赖项打包到一个二进制文件中比分发大量DLL更方便。
在OSX上,一些依赖项由操作系统提供,而其他一些则不是。因此,将链接到操作系统提供的库动态地,而将其他库静态地链接会很有帮助。不幸的是,libtool的全静态或全动态的-all-static选项在这里并不实用。
是否有一种好的方法让libtool静态地链接到一些库,但不是全部?
注意:我意识到我可以仔细编译依赖项,以便只有静态构建可用。然而,我更希望我的项目的构建系统在静态和动态构建依赖项都可用的常见情况下更加健壮。
注意:当然,我不关心像C/C++运行时库这样的真正低级依赖项,在上述三个平台上,它们总是动态链接的。
1个回答

7
经过一些研究,我已经找到了答案。
如果你安装了一个库的静态和动态版本,并且你使用-l参数链接到该库,那么libtool优先链接到动态版本。如果没有动态版本可用,或者你传递了-static-all-static选项,则会链接到静态版本。
通过在-l选项的位置上给出静态库的完整路径,可以强制libtool链接到静态库。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接