RPATH适用于LDD显示的大多数依赖库,但不适合CentOS 7.7上的所有库。

发布于 2025-02-05 01:26:50 字数 5727 浏览 2 评论 0原文

我仅在CENTOS 7.7上有这个问题(在Fedora 33和35上都可以按预期工作)。由于某种原因,我的适应应用程序试图打开系统libqt5core.so.5libsystemd.so.0,以及其他一些。

我确保拥有rpath(即,甚至没有runpath:我通过使用patchelf-force-rpath -set-rpath)实现了它。正确设置所有可执行文件和LIB。在下面,我在用-Appimage-track选项中提取它后显示了我的适应性情况,并且应用patchelf set rpath

[jenya@localhost bin]$ ldd myapp 
./myapp: /lib64/libQt5Core.so.5: version `Qt_5.15' not found (required by ./myapp)
./myapp: /lib64/libQt5Core.so.5: version `Qt_5.15' not found (required by /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libQt5Widgets.so.5)
./myapp: /lib64/libQt5Core.so.5: version `Qt_5.15.2_PRIVATE_API' not found (required by /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libQt5Widgets.so.5)
./myapp: /lib64/libQt5Core.so.5: version `Qt_5.15' not found (required by /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libQt5Gui.so.5)
./myapp: /lib64/libQt5Core.so.5: version `Qt_5.15.2_PRIVATE_API' not found (required by /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libQt5Gui.so.5)
./myapp: /lib64/libQt5Core.so.5: version `Qt_5.15.2_PRIVATE_API' not found (required by /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libQt5Sql.so.5)
./myapp: /lib64/libQt5Core.so.5: version `Qt_5.15' not found (required by /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libQt5Sql.so.5)
./myapp: /lib64/libQt5Core.so.5: version `Qt_5.15' not found (required by /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libQt5Network.so.5)
./myapp: /lib64/libQt5Core.so.5: version `Qt_5.15.2_PRIVATE_API' not found (required by /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libQt5Network.so.5)
./myapp: /lib64/libQt5Core.so.5: version `Qt_5.15.2_PRIVATE_API' not found (required by /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libQt5Test.so.5)
./myapp: /lib64/libQt5Core.so.5: version `Qt_5.15' not found (required by /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libQt5Test.so.5)
    linux-vdso.so.1 =>  (0x00007ffcc2592000)
    libQt5Widgets.so.5 => /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libQt5Widgets.so.5 (0x00007f2048415000)
    libQt5Gui.so.5 => /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libQt5Gui.so.5 (0x00007f2047d9c000)
    libQt5Sql.so.5 => /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libQt5Sql.so.5 (0x00007f2048d47000)
    libQt5Network.so.5 => /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libQt5Network.so.5 (0x00007f2048b98000)
    libQt5Test.so.5 => /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libQt5Test.so.5 (0x00007f2047d41000)
--->libQt5Core.so.5 => /lib64/libQt5Core.so.5 (0x00007f2047894000)
    libstdc++.so.6 => /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libstdc++.so.6 (0x00007f2047663000)
    libm.so.6 => /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libm.so.6 (0x00007f204751a000)
    libgcc_s.so.1 => /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libgcc_s.so.1 (0x00007f20474fe000)
    libc.so.6 => /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libc.so.6 (0x00007f204732c000)
    libpthread.so.0 => /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libpthread.so.0 (0x00007f2047308000)
    libGL.so.1 => /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libGL.so.1 (0x00007f204726e000)
    libpng16.so.16 => /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libpng16.so.16 (0x00007f2047233000)
    libz.so.1 => /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libz.so.1 (0x00007f2047218000)
    libharfbuzz.so.0 => /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libharfbuzz.so.0 (0x00007f2047146000)
    libdl.so.2 => /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libdl.so.2 (0x00007f204713e000)
    libgssapi_krb5.so.2 => /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libgssapi_krb5.so.2 (0x00007f20470e5000)
    libssl.so.1.1 => /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libssl.so.1.1 (0x00007f2047042000)
    libcrypto.so.1.1 => /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libcrypto.so.1.1 (0x00007f2046d3e000)
    libsystemd.so.0 => /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libsystemd.so.0 (0x00007f2046c78000)
    libicui18n.so.50 => /lib64/libicui18n.so.50 (0x00007f2046879000)
    libicuuc.so.50 => /lib64/libicuuc.so.50 (0x00007f2046500000)
    libicudata.so.50 => /lib64/libicudata.so.50 (0x00007f2044f2c000)
    libpcre2-16.so.0 => /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libpcre2-16.so.0 (0x00007f2044ea1000)
    libgthread-2.0.so.0 => /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libgthread-2.0.so.0 (0x00007f2044e9b000)
    libglib-2.0.so.0 => /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libglib-2.0.so.0 (0x00007f2044d5e000)
    ../lib/ld-linux-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2 (0x00007f2048b71000)

但是,但是,我有libqt5core.so.5,在哪里:

[jenya@localhost bin]$ ls /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libQt5Core.so.5 
/home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libQt5Core.so.5

此外,我确保确实具有rpath的确,而不是Runpath

[jenya@localhost bin]$ readelf -d ./myapp  | grep PATH
 0x000000000000000f (RPATH)              Library rpath: [$ORIGIN/../lib]

[jenya@localhost bin]$ readelf -d ../lib/libQt5Widgets.so.5  | grep PATH
 0x000000000000000f (RPATH)              Library rpath: [$ORIGIN]

如何这可以是,如何解决?谢谢您的关注。

I have this problem only on CentOS 7.7 (on Fedora 33 and 35 it all works as expected). My appimage app for some reason tries to open system libQt5Core.so.5, libsystemd.so.0, and some others, while loading most other libraries from the appimage as intended.

I ensured to have RPATH (i.e., not even RUNPATH: I achieved it by using patchelf --force-rpath --set-rpath) set up correctly for all the executable and libs. Below, I show the situation for my appimage after I extracted it with --appimage-extract option and applied patchelf to set RPATH:

[jenya@localhost bin]$ ldd myapp 
./myapp: /lib64/libQt5Core.so.5: version `Qt_5.15' not found (required by ./myapp)
./myapp: /lib64/libQt5Core.so.5: version `Qt_5.15' not found (required by /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libQt5Widgets.so.5)
./myapp: /lib64/libQt5Core.so.5: version `Qt_5.15.2_PRIVATE_API' not found (required by /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libQt5Widgets.so.5)
./myapp: /lib64/libQt5Core.so.5: version `Qt_5.15' not found (required by /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libQt5Gui.so.5)
./myapp: /lib64/libQt5Core.so.5: version `Qt_5.15.2_PRIVATE_API' not found (required by /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libQt5Gui.so.5)
./myapp: /lib64/libQt5Core.so.5: version `Qt_5.15.2_PRIVATE_API' not found (required by /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libQt5Sql.so.5)
./myapp: /lib64/libQt5Core.so.5: version `Qt_5.15' not found (required by /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libQt5Sql.so.5)
./myapp: /lib64/libQt5Core.so.5: version `Qt_5.15' not found (required by /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libQt5Network.so.5)
./myapp: /lib64/libQt5Core.so.5: version `Qt_5.15.2_PRIVATE_API' not found (required by /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libQt5Network.so.5)
./myapp: /lib64/libQt5Core.so.5: version `Qt_5.15.2_PRIVATE_API' not found (required by /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libQt5Test.so.5)
./myapp: /lib64/libQt5Core.so.5: version `Qt_5.15' not found (required by /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libQt5Test.so.5)
    linux-vdso.so.1 =>  (0x00007ffcc2592000)
    libQt5Widgets.so.5 => /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libQt5Widgets.so.5 (0x00007f2048415000)
    libQt5Gui.so.5 => /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libQt5Gui.so.5 (0x00007f2047d9c000)
    libQt5Sql.so.5 => /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libQt5Sql.so.5 (0x00007f2048d47000)
    libQt5Network.so.5 => /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libQt5Network.so.5 (0x00007f2048b98000)
    libQt5Test.so.5 => /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libQt5Test.so.5 (0x00007f2047d41000)
--->libQt5Core.so.5 => /lib64/libQt5Core.so.5 (0x00007f2047894000)
    libstdc++.so.6 => /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libstdc++.so.6 (0x00007f2047663000)
    libm.so.6 => /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libm.so.6 (0x00007f204751a000)
    libgcc_s.so.1 => /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libgcc_s.so.1 (0x00007f20474fe000)
    libc.so.6 => /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libc.so.6 (0x00007f204732c000)
    libpthread.so.0 => /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libpthread.so.0 (0x00007f2047308000)
    libGL.so.1 => /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libGL.so.1 (0x00007f204726e000)
    libpng16.so.16 => /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libpng16.so.16 (0x00007f2047233000)
    libz.so.1 => /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libz.so.1 (0x00007f2047218000)
    libharfbuzz.so.0 => /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libharfbuzz.so.0 (0x00007f2047146000)
    libdl.so.2 => /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libdl.so.2 (0x00007f204713e000)
    libgssapi_krb5.so.2 => /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libgssapi_krb5.so.2 (0x00007f20470e5000)
    libssl.so.1.1 => /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libssl.so.1.1 (0x00007f2047042000)
    libcrypto.so.1.1 => /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libcrypto.so.1.1 (0x00007f2046d3e000)
    libsystemd.so.0 => /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libsystemd.so.0 (0x00007f2046c78000)
    libicui18n.so.50 => /lib64/libicui18n.so.50 (0x00007f2046879000)
    libicuuc.so.50 => /lib64/libicuuc.so.50 (0x00007f2046500000)
    libicudata.so.50 => /lib64/libicudata.so.50 (0x00007f2044f2c000)
    libpcre2-16.so.0 => /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libpcre2-16.so.0 (0x00007f2044ea1000)
    libgthread-2.0.so.0 => /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libgthread-2.0.so.0 (0x00007f2044e9b000)
    libglib-2.0.so.0 => /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libglib-2.0.so.0 (0x00007f2044d5e000)
    ../lib/ld-linux-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2 (0x00007f2048b71000)

However, I have the libQt5Core.so.5, where it should be:

[jenya@localhost bin]$ ls /home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libQt5Core.so.5 
/home/jenya/Downloads/squashfs-root/usr/bin/./../lib/libQt5Core.so.5

Besides, I have ensured to have RPATH indeed, rather than RUNPATH:

[jenya@localhost bin]$ readelf -d ./myapp  | grep PATH
 0x000000000000000f (RPATH)              Library rpath: [$ORIGIN/../lib]

[jenya@localhost bin]$ readelf -d ../lib/libQt5Widgets.so.5  | grep PATH
 0x000000000000000f (RPATH)              Library rpath: [$ORIGIN]

How can this be and how can this be fixed? Thank you for attention.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

月光色 2025-02-12 01:26:50
[jenya@localhost bin]$ objdump -s -j .note.ABI-tag ../lib/libQt5Core.so.5 

../lib/libQt5Core.so.5:     file format elf64-x86-64

Contents of section .note.ABI-tag:
 03a4 04000000 10000000 01000000 474e5500  ............GNU.
 03b4 00000000 03000000 11000000 00000000  ................

如果仔细观察,人们可以看到03 ... 11。这说它希望内核不小于3.17。

strip的解决方案在此处提出 https://bugsarlinux.org.org/任务/61130 在网上的其他地方没有帮助我。

因此,我安装了hexedit,并用它打开了lib。我制作了/ - 的搜索> 10000000000000000474E5500,然后替换11(即17)(IE 17)01(仅一些版本少一些版本比3.10,即CentOS 7.7的版本),并保存和退出(ctrl+x)。

这是一个技巧。

[jenya@localhost bin]$ objdump -s -j .note.ABI-tag ../lib/libQt5Core.so.5 

../lib/libQt5Core.so.5:     file format elf64-x86-64

Contents of section .note.ABI-tag:
 03a4 04000000 10000000 01000000 474e5500  ............GNU.
 03b4 00000000 03000000 11000000 00000000  ................

If one looks closely one can see 03 ... 11. This says that it want kernel not younger than 3.17.

The solution by strip, proposed here https://bugs.archlinux.org/task/61130 and in some other places on the net did not help me.

So I installed hexedit and opened the lib with it. I made /-search of 1000000001000000474e5500, and replaced 11 (i.e. 17) by 01 (just some version less than 3.10, i.e. the version of Centos 7.7), and saved and exited (by Ctrl+x).

This did the trick.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文