我正在尝试构建一个 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
因为某种原因需要安装它自己的库。