从 Makefile 中的 c 可执行文件中删除硬编码的 rpath
Remove hardcoded rpath from c executable in Makefile
我的 C++ 应用程序有一个可执行文件和多个本地共享库。当我构建可执行文件时,链接器(LD)将可执行文件 RPATH 设置为编译环境中本地共享库的路径。
问题是,当我构建应用程序的 RPM 并将 RPM 安装在其他系统上时,应用程序可执行文件会在编译环境中它们所在的目录中查找本地共享库。
我希望我的可执行文件在 RPM 安装它们的路径上查找本地共享库,而不是在编译期间它们存在的路径上。
我知道我可以在使用实用程序 chrpath 安装 RPM 后更改我的可执行文件的 RPATH。
但我想让它自动化。
通过 Makefile 中的 LD 标志或通过从 RPM 规范文件执行 CHRPATH 来执行 it.Whether 的首选方法是什么。或者有没有其他更好的方法。
rpath 是一个链接器标志,可能在 LDFLAGS 中设置。
要删除它,只需编辑 Makefile 中的链接器标志。或者,如果它们以模棱两可的方式传递到您的构建环境(它们是在调用 make 之前设置的,您不确定在哪里),您可以简单地覆盖它们:
LDFLAGS = -your_linker_flags
希望对您有所帮助
为什么 rpath 不好:https://docs.fedoraproject.org/en-US/packaging-guidelines/#_beware_of_rpath
删除方法:
https://docs.fedoraproject.org/en-US/packaging-guidelines/#_removing_rpath
我的 C++ 应用程序有一个可执行文件和多个本地共享库。当我构建可执行文件时,链接器(LD)将可执行文件 RPATH 设置为编译环境中本地共享库的路径。
问题是,当我构建应用程序的 RPM 并将 RPM 安装在其他系统上时,应用程序可执行文件会在编译环境中它们所在的目录中查找本地共享库。
我希望我的可执行文件在 RPM 安装它们的路径上查找本地共享库,而不是在编译期间它们存在的路径上。
我知道我可以在使用实用程序 chrpath 安装 RPM 后更改我的可执行文件的 RPATH。 但我想让它自动化。 通过 Makefile 中的 LD 标志或通过从 RPM 规范文件执行 CHRPATH 来执行 it.Whether 的首选方法是什么。或者有没有其他更好的方法。
rpath 是一个链接器标志,可能在 LDFLAGS 中设置。 要删除它,只需编辑 Makefile 中的链接器标志。或者,如果它们以模棱两可的方式传递到您的构建环境(它们是在调用 make 之前设置的,您不确定在哪里),您可以简单地覆盖它们:
LDFLAGS = -your_linker_flags
希望对您有所帮助
为什么 rpath 不好:https://docs.fedoraproject.org/en-US/packaging-guidelines/#_beware_of_rpath
删除方法: https://docs.fedoraproject.org/en-US/packaging-guidelines/#_removing_rpath