【问题标题】:How do I link a shared library with --as-needed with automake?如何将共享库与 --as-needed 与 automake 链接?
【发布时间】:2011-07-27 23:23:11
【问题描述】:

如何使用 Automake 将共享库与 --as-needed 链接?当我尝试将标志添加到LDFLAGS 时,我看到libtool 是这样调用的:

/bin/bash ../../libtool --mode=link ... -Wl,--as-needed ... dependencies

这会导致像这样调用 GCC:

gcc -shared ... dependencies ... -Wl,--as-needed ...

但这是错误的顺序。

  • 有没有办法用 Libtool 做到这一点?

  • 或者有没有一种使用 Automake 但不使用 Libtool 构建共享库的好方法? (我过去因为各种其他原因对 Libtool 感到沮丧……)

似乎 Debian 的人也遇到了这个问题 (bug report),但我希望能够为我的项目解决这个问题,而不是弄乱我的系统(除非我误解了修复)。

【问题讨论】:

  • 我希望事情发生了变化,因为您的参考来自 2006 年并提到了 libtool 1.5,但似乎没有:sigquit.wordpress.com/2011/02/16/…
  • 是的,我正在运行 libtool 2.2.6。

标签: linker automake libtool


【解决方案1】:

您可以通过修改项目源代码中的 ltmain.sh 脚本来解决此问题。您甚至可以将其添加为 autotools 引导的一部分,如下所示: https://meego.gitorious.org/tracker/tracker/commit/cf2ca3414aeba146dceacc5ecd84765f4c08a06f

【讨论】:

    【解决方案2】:

    你可以在Makefile.am修复它;基本上和my question here的答案一样,只是你需要用-(no-)as-needed而不是-(no-)whole-archive

    【讨论】:

    • 你能扩展一下吗?问题是把它放在 LDFLAGS 中是行不通的。
    • 嗯,在我看来问题在于它以错误的顺序放入命令行。通过使用打开和关闭行为的选项将命令行上的共享库名称括起来,在我看来它应该在 LDFLAGS 中工作。还是我完全误解了?
    • 问题是当我以正确的顺序将标志传递给 libtool 时,libtool 会重新排序它们。
    • 但是这个解决方案将as-needed 标志和依赖项放在一个不可重新排序的块中,libtool 将其视为一个命令行参数。
    • 好的,但我需要使用来自 Autoconf 的一个大的讨厌变量中的变量来构建命令行,其中包含其他 -Wl 标志。
    【解决方案3】:

    确实是一个令人沮丧的问题,尤其是对于包维护而言。

    Debian 已内置支持修补 libtool 并在 debian 软件包中修复此问题

    dh_autoreconf --as-needed
    

    或者,如果您使用的是 CDBS:

    include /usr/share/cdbs/1/rules/autoreconf.mk
    
    DEB_DH_AUTORECONF_ARGS += --as-needed
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多