长话短说:我使用relative rpath linking(this script automake,autoconf,libtool)处理uses。
问题是二进制可执行文件或rpath
文件中的最后runpath
/ so
条目仍然具有绝对路径:
-L
LDFLAGS
值
唯一的问题仍然是:如何以及在何时(正确的方式)我可以设置其他libtool变量,例如hardcode_minus_L
。 (我在网上搜索过它,但我找不到任何东西。)
我尝试执行以下操作:
sed
文件(在正确的目录中)中的libtool
替换变量的值:它工作正常,但make
是叫它再次覆盖整个libtool
文件(它被重新生成)请注意,2个二进制文件受此影响,rpath
/ runpath
条目objdump -p
:
RUNPATH /home/user1/lib/rtorrent-0.9.7-1.5.3/lib:$ORIGIN/../lib
RUNPATH $ORIGIN/../lib:/home/user1/lib/rtorrent-0.9.7-1.5.3/lib
由于
答案 0 :(得分:1)
我不知道修改生成的libtool
脚本是否是解决问题的最佳方法。但是如果你这样做,你需要通过在sed
内执行AC_CONFIG_COMMANDS
命令来使方法健壮。
在config.status期间生成libtool
脚本作为配置命令(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])
您需要在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
第二个参数是tag
或default
标记,如果它是空的。