如何、何时、何地设置 libtool 的脚本变量? (例如 hardcode_minus_L)

How, when, where to set script variables of libtool? (e.g. hardcode_minus_L)

长话短说:我从事 relative rpath linking with this script (that uses automake、autoconf、libtool)。 问题是二进制可执行文件或 so 文件中的最终 rpath/runpath 条目仍然具有绝对路径:

唯一的问题仍然存在:我可以如何以及在什么时候(什么是正确的方法)设置其他 libtool 变量,例如 hardcode_minus_L。 (我在网上找过,没找到。)

我尝试执行以下操作:

注意,2 个二进制文件受此影响,条目 rpath/runpathobjdump -p:

谢谢

我不知道修改生成的 libtool 脚本是否是解决您问题的最佳方法。但是如果你这样做,你需要通过在 AC_CONFIG_COMMANDS.

中执行你的 sed 命令来使方法更健壮

libtool 脚本是在 config.status 期间作为配置命令生成的 (AC_CONFIG_COMMANDS: https://www.gnu.org/software/autoconf/manual/autoconf.html#Configuration-Commands)。

config.status: executing libtool commands

您可以通过添加另一个 AC_CONFIG_COMMANDS 来修改此生成的文件。 我们使用以下方法来改变 prefer_static_libs 变量:

AC_CONFIG_COMMANDS([libtool-fix-linker-preference],                                                                                                                      
    [${SED} -e '1,/prefer_static_libs=/ s/prefer_static_libs=.*$/prefer_static_libs=yes/' \
     libtool > libtool.fix && mv libtool.fix libtool])

您需要在 LT_INIT 之后触发您的 AC_CONFIG_COMMANDS。 configure/config.status 报告执行:

config.status: executing libtool commands
config.status: executing libtool-fix-linker-preference commands

希望对您有所帮助,

克里斯蒂安

事实证明,在 configure.ac 中修改这些变量相当容易,不需要 sed - 在摆弄并查看生成的脚本之后。唯一令人困惑的是这些变量可以应用于 tags 在给定项目中定义。

例如要在 rtorrent 项目中将 hardcode_libdir_flag_spec 更改为空值(意味着它会破坏编译),您将插入到 configure.ac:

_LT_TAGVAR(hardcode_libdir_flag_spec, )=""
_LT_TAGVAR(hardcode_libdir_flag_spec, CXX)=""
_LT_TAGVAR(hardcode_minus_L, )=yes
_LT_TAGVAR(hardcode_minus_L, CXX)=yes

第二个参数是 tagdefault 标签,如果它是空的。