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

时间:2017-07-24 13:33:32

标签: autoconf libtool

长话短说:我使用relative rpath linkingthis script automake,autoconf,libtool)处理uses。 问题是二进制可执行文件或rpath文件中的最后runpath / so条目仍然具有绝对路径:

唯一的问题仍然是:如何以及在何时(正确的方式)我可以设置其他libtool变量,例如hardcode_minus_L。 (我在网上搜索过它,但我找不到任何东西。)

我尝试执行以下操作:

  • 在调用configure后,我尝试用sed文件(在正确的目录中)中的libtool替换变量的值:它工作正常,但make是叫它再次覆盖整个libtool文件(它被重新生成)

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

  • libcurl.soRUNPATH /home/user1/lib/rtorrent-0.9.7-1.5.3/lib:$ORIGIN/../lib
  • rtorrentRUNPATH $ORIGIN/../lib:/home/user1/lib/rtorrent-0.9.7-1.5.3/lib

由于

2 个答案:

答案 0 :(得分:1)

我不知道修改生成的libtool脚本是否是解决问题的最佳方法。但是如果你这样做,你需要通过在sed内执行AC_CONFIG_COMMANDS命令来使方法健壮。

在config.status期间生成libtool脚本作为配置命令(AC_CONFIG_COMMANDShttps://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])

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

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

希望有所帮助,

基督教

答案 1 :(得分:0)

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

E.g。要将hardcode_libdir_flag_spec更改为rtorrent项目中的空值(意味着它会破坏编译),您可以插入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标记,如果它是空的。