如何使可执行文件在重定位后找到库?

如何使可执行文件在重定位后找到库?

我正在尝试构建一个 RPMGNU 库

编译源代码我没有问题,但是当我安装到临时位置时,共享库的完整临时路径会被硬编码到 iconv 可执行文件中。

我尝试添加--disable-rpath到配置命令中,因为它说“不要硬编码运行时库路径”,但这似乎不起作用。

我的构建命令如下所示:

./configure --prefix=/usr/local --disable-rpath && \
make && \
make DESTDIR=/tmp/path install

运行ldd /tmp/path/usr/local/bin/iconv我可以看到路径/tmp/path/usr/local/lib/libiconv.so.2是硬编码的

我如何确保可执行文件在最终目的地查找库而/usr/local/lib不是在构建它们的地方查找它们?

答案1

在完全无法避免可执行文件中的 rpath 之后,我最终使用该chrpath程序对其进行了修补。

我必须分两步来设置最终路径,并避免 rpmbuild 在 check-rpaths 阶段失败。

我最终在 make 之后得到了这个:

make DESTDIR=/tmp/path install
chrpath --replace /usr/local/lib /tmp/path/usr/local/bin/iconv
chrpath --convert /tmp/path/usr/local/bin/iconv

chrpath在阅读时发现Fedora 的包装指南。虽然我在 CentOS 上。

这对我来说很有效,尽管这可能不是最好的方法。我无法在没有硬编码路径的情况下构建可执行文件。这可能与 iconv 可执行文件的构建方式有关。它实际上是在阶段构建的,make install因为某种原因需要安装它自己的库。

相关内容