Static libraries 是否可以链接一些—;但并非全部—;使用libtool静态地创建库?

Static libraries 是否可以链接一些—;但并非全部—;使用libtool静态地创建库?,static-libraries,libtool,Static Libraries,Libtool,我正在做一个使用autoconf、automake和libtool构建的项目。该项目以二进制和源代码形式分发 在Linux上,默认情况下构建脚本动态链接到所有库。这是有意义的,因为Linux用户可以依赖其发行版的包管理器来处理依赖关系 在Windows上,默认情况下,生成脚本使用libtool的-all static选项静态链接到所有库。这是有意义的,因为Windows没有提供任何依赖项,并且能够分发包含所有依赖项的单个二进制文件,而不是分发大量DLL是很有帮助的 在OSX上,有些依赖项是由操作

我正在做一个使用autoconf、automake和libtool构建的项目。该项目以二进制和源代码形式分发

在Linux上,默认情况下构建脚本动态链接到所有库。这是有意义的,因为Linux用户可以依赖其发行版的包管理器来处理依赖关系

在Windows上,默认情况下,生成脚本使用libtool的
-all static
选项静态链接到所有库。这是有意义的,因为Windows没有提供任何依赖项,并且能够分发包含所有依赖项的单个二进制文件,而不是分发大量DLL是很有帮助的

在OSX上,有些依赖项是由操作系统提供的,有些则不是。因此,动态链接到操作系统提供的库和静态链接到其他库会很有帮助。不幸的是,libtool的all or nothing
-all static
选项在这里没有帮助

有没有一种好方法可以让libtool静态链接到一些库,而不是所有库

注意:我意识到我可以小心地编译依赖项,以便只有静态版本可用。然而,我更希望我的项目的构建系统在静态和动态构建依赖项的常见情况下是健壮的


注意:当然,我不关心像C/C++运行时库这样的低级别依赖,它们总是在上述三种平台上动态链接。

经过一些研究,我回答了自己的问题

如果安装了库的静态和动态版本,并且使用
-l
参数链接到该库,则libtool会优先链接到动态版本。如果没有可用的动态生成,或者您传递了
-static
-all static
选项,则会链接到静态生成

通过提供指向静态库的完整路径来代替
-l
选项,可以强制libtool链接到静态库