我的c ++应用程序有一个可执行文件和多个本地共享库。构建可执行文件时,链接器(LD)将可执行RPATH设置为编译环境中本地共享库的路径。
问题在于,当我构建应用程序的RPM并在其他系统上安装RPM时,应用程序可执行文件会在编译环境中的目录中查找本地共享库。
我希望我的可执行文件在RPM安装它们的路径上查找本地共享库,而不是在编译期间它们所在的路径。
我知道在使用实用程序chrpath安装RPM后,我可以更改可执行文件的RPATH。 但我想自动化它。 什么是首选方法。是通过Makefile中的LD标志,还是从RPM spec文件中执行CHRPATH。还是有其他更好的方式。
答案 0 :(得分:1)
为什么rpath不好: https://fedoraproject.org/wiki/Packaging:Guidelines#Beware_of_Rpath
如何删除它: https://fedoraproject.org/wiki/Packaging:Guidelines#Removing_Rpath
答案 1 :(得分:0)
rpath是一个链接器标志,可能在LDFLAGS中设置。 要删除它,只需编辑Makefile中的链接器标志即可。或者如果它们以模糊的方式传递到您的构建环境(它们在调用make之前设置并且您不确定在哪里),您可以简单地覆盖它们:
LDFLAGS = -your_linker_flags
希望这有帮助