【发布时间】:2018-01-12 18:08:14
【问题描述】:
我正在为armhf进行交叉编译,编译过程很顺利,但是GLIBC版本太旧了,./libc.so.6显示它是由gcc 4.6.3编译的,不幸的是我在 apt-get 上找不到这个旧版本。所以我尝试使用 follow LDFLAG 选项重新定位 lib 路径。
-Wl,-rpath,/boxer/lib -Wl,--dynamic-linker,/boxer/lib/ld-linux-armhf.so.3
并将对应的库部署到/boxer/lib,但问题没有解决,./ld-linux-armhf.so.3 --list显示ld链接正确地方,但是,正如你在下面看到的,其余的都没有。
root@cubieboard2:/lib/arm-linux-gnueabihf# ./ld-linux-armhf.so.3 --list /boxer/frida-server
/boxer/frida-server: /lib/arm-linux-gnueabihf/libc.so.6: version `GLIBC_2.17' not found (required by /boxer/frida-server)
libresolv.so.2 => /lib/arm-linux-gnueabihf/libresolv.so.2 (0xb6f7a000)
libdl.so.2 => /lib/arm-linux-gnueabihf/libdl.so.2 (0xb6f6e000)
libpthread.so.0 => /lib/arm-linux-gnueabihf/libpthread.so.0 (0xb6f53000)
libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0xb6e6f000)
/boxer/lib/ld-linux-armhf.so.3 => ./ld-linux-armhf.so.3 (0xb6f9e000)
有什么建议吗?谢谢。
更新:
这里是LD_TRACE_LOADED_OBJECTS=1选项结果,好像和上面一样
root@cubieboard2:/boxer# LD_TRACE_LOADED_OBJECTS=1 /boxer/frida-server
/boxer/frida-server: /lib/arm-linux-gnueabihf/libc.so.6: version `GLIBC_2.17' not found (required by /boxer/frida-server)
libresolv.so.2 => /lib/arm-linux-gnueabihf/libresolv.so.2 (0xb6f10000)
libdl.so.2 => /lib/arm-linux-gnueabihf/libdl.so.2 (0xb6f05000)
libpthread.so.0 => /lib/arm-linux-gnueabihf/libpthread.so.0 (0xb6eea000)
libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0xb6e06000)
/boxer/lib/ld-linux-armhf.so.3 (0xb6f28000)
root@cubieboard2:/boxer#
ld-linux 有合适的去处,但其他的还在老路上...
这是我之前使用 QT 编译的另一个程序,带有 rpath LDFLAG:
QMAKE_LFLAGS +=-Wl,-rpath,/boxer/lib -Wl,--dynamic-linker,/boxer/lib/ld-linux.so.3
是的,我关注了your answer,它工作正常(谢谢,大帮助 :-)),LD_TRACE_LOADED_OBJECTS=1 结果:
# LD_TRACE_LOADED_OBJECTS=1 /boxer/Boxer
libdl.so.2 => /boxer/lib/libdl.so.2 (0xb6efb000)
libQt5Widgets.so.5 => /boxer/lib/libQt5Widgets.so.5 (0xb69b9000)
libQt5Gui.so.5 => /boxer/lib/libQt5Gui.so.5 (0xb655f000)
libQt5Network.so.5 => /boxer/lib/libQt5Network.so.5 (0xb646f000)
libQt5Core.so.5 => /boxer/lib/libQt5Core.so.5 (0xb5f50000)
libpthread.so.0 => /boxer/lib/libpthread.so.0 (0xb5f27000)
libstdc++.so.6 => /boxer/lib/libstdc++.so.6 (0xb5ddc000)
libm.so.6 => /boxer/lib/libm.so.6 (0xb5d2a000)
libgcc_s.so.1 => /boxer/lib/libgcc_s.so.1 (0xb5cfa000)
libc.so.6 => /boxer/lib/libc.so.6 (0xb5bb5000)
/boxer/lib/ld-linux.so.3 (0xb6f0e000)
librt.so.1 => /boxer/lib/librt.so.1 (0xb5b9e000)
我们可以看到一切顺利,包括 libc,有什么不同?
【问题讨论】: