Linker 我如何将共享库与automake链接?

Linker 我如何将共享库与automake链接?,linker,automake,libtool,Linker,Automake,Libtool,如何使用Automake根据需要将共享库与--链接?当我尝试将标志添加到LDFLAGS时,我看到libtool被这样调用: /bin/bash ../../libtool --mode=link ... -Wl,--as-needed ... dependencies 这导致调用GCC,如下所示: gcc -shared ... dependencies ... -Wl,--as-needed ... 但那是错误的顺序 有没有办法用Libtool实现这一点 或者有没有一种很好的方法可以使用

如何使用Automake根据需要将共享库与
--
链接?当我尝试将标志添加到
LDFLAGS
时,我看到
libtool
被这样调用:

/bin/bash ../../libtool --mode=link ... -Wl,--as-needed ... dependencies
这导致调用GCC,如下所示:

gcc -shared ... dependencies ... -Wl,--as-needed ...
但那是错误的顺序

  • 有没有办法用Libtool实现这一点

  • 或者有没有一种很好的方法可以使用Automake而不使用Libtool来构建共享库?(过去,由于各种其他原因,我对Libtool感到失望…)


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

您可以通过修改项目源中的ltmain.sh脚本来为您的项目解决这个问题。您甚至可以将其添加为autotools引导的一部分,如中所示:

您可以在
Makefile.am
中修复它;基本上,它与的答案相同,只是您需要根据需要使用
-(no-)
而不是
-(no-)整个归档文件

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

Debian内置了对修补libtool的支持,并在Debian软件包中修复了这个问题

dh_autoreconf --as-needed
或者,如果您正在使用CDB:

include /usr/share/cdbs/1/rules/autoreconf.mk

DEB_DH_AUTORECONF_ARGS += --as-needed

我希望事情已经发生了变化,因为您的参考是2006年的,并且提到了
libtool
1.5,但似乎不是:是的,我正在运行libtool 2.2.6。您能对此进行扩展吗?问题是把它放在LDFLAGS中不起作用。嗯,在我看来,问题是它以错误的顺序放在命令行中。通过在命令行中用选项将共享库名称括起来,打开和关闭行为,在我看来,它应该在LDFLAGS中工作。或者我完全误解了?问题是,当我以正确的顺序将标志传递给libtool时,libtool会对它们进行重新排序。但是这个解决方案将
标志和依赖项放在一个不可重新排序的块中,libtool将其视为一个命令行参数。好的,但是我需要使用来自Autoconf的一个大变量中的变量来构造命令行,该变量中包含其他
-Wl
标志。