【问题标题】:Is it possible to link some — but not all — libraries statically with libtool?是否可以使用 libtool 静态链接一些(但不是全部)库?
【发布时间】:2009-12-22 02:13:50
【问题描述】:

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

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

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

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

有没有一种好方法可以让 libtool 静态链接到 一些 库,但不是全部?

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

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

【问题讨论】:

    标签: static-libraries libtool


    【解决方案1】:

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

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

    可以通过给出该库的完整路径代替-l 选项来强制libtool 链接到静态库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-18
      相关资源
      最近更新 更多