长话短说:我在相对rpath链接上使用了这个剧本 ( 使用 automake,autoconf,libtool)。问题是二进制可执行文件或rpath文件中的最终runpath条目仍然具有绝对路径:
-L值(如果它是在LDFLAGS中设置的)唯一的问题是:如何以及在什么时候(正确的方式)设置其他libtool变量,比如hardcode_minus_L。(我在网上搜索过,但什么也找不到。)
我试着做以下几件事:
libtool文件中(在适当的目录中)用sed替换变量的值:它工作了,但是当make被调用时,它再次覆盖了整个libtool文件(它被重新生成)请注意,两个二进制文件受此影响,输入为rpath/runpath和objdump -p
RUNPATH /home/user1/lib/rtorrent-0.9.7-1.5.3/lib:$ORIGIN/../libRUNPATH $ORIGIN/../lib:/home/user1/lib/rtorrent-0.9.7-1.5.3/lib谢谢
发布于 2017-08-16 14:26:22
事实证明,在configure.ac中修改这些变量相当容易,不需要sed --在修改和查看生成的脚本之后。唯一令人困惑的是,这些变量可以应用于给定项目中定义的tags。
例如,要将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标记(如果它是空的)。
发布于 2017-08-01 06:53:17
我不知道修改生成的libtool脚本是否是解决问题的最佳方法。但是,如果这样做,则需要在sed中执行AC_CONFIG_COMMANDS命令,从而使该方法更加健壮。
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])您需要在AC_CONFIG_COMMANDS之后触发LT_INIT。配置/config.state报告执行情况:
config.status: executing libtool commands
config.status: executing libtool-fix-linker-preference commands希望能帮上忙
克里斯蒂安
https://stackoverflow.com/questions/45282061
复制相似问题