【发布时间】:2009-12-22 02:13:50
【问题描述】:
我正在开发一个使用 autoconf、automake 和 libtool 构建的项目。该项目以二进制和源代码形式分发。
在 Linux 上,默认情况下,构建脚本会动态链接到所有库。这是有道理的,因为 Linux 用户可以依靠其发行版的包管理器来处理依赖关系。
在 Windows 上,默认情况下,构建脚本使用 libtool 的 -all-static 选项静态链接到所有库。这是有道理的,因为 Windows 没有提供任何依赖项,并且能够分发包含所有依赖项的单个二进制文件而不是忙于分发大量 DLL 会很有帮助。
在 OSX 上,一些依赖项是由操作系统提供的,而另一些则不是。因此,动态链接到操作系统提供的库和静态链接到其他库会很有帮助。不幸的是,libtool 的全有或全无 -all-static 选项在这里没有帮助。
有没有一种好方法可以让 libtool 静态链接到 一些 库,但不是全部?
注意:我意识到我可以仔细编译依赖项,以便只有静态构建可用。然而,我希望我的项目的构建系统在静态和依赖的动态构建可用的常见情况下是健壮的。
注意:当然,我并不关心像 C/C++ 运行时库这样的低级依赖关系,它们总是在上述所有三个平台上动态链接。
【问题讨论】: