首页 文章

glibc版本早于gcc版本和-Wl,-rpath不起作用

提问于
浏览
1

我正在为armhf进行交叉编译,编译过程很顺利,但是GLIBC版本很旧, ./libc.so.6 显示它是由gcc 4.6.3编译的,不幸的是我可以't find this old version on apt-get.so i '试图通过使用跟随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)

有什么建议吗?谢谢 .

Update:

这是 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,有什么不同?

1 回答

  • 0

    GLIBC版本很旧, . / libc.so.6显示它是由gcc 4.6.3编译的,遗憾的是我在apt-get上找不到这个旧版本 .

    请注意,GLIBC的版本与编译它的GCC版本几乎没有关系 . 较新版本的GLIBC确实需要更新版本的GCC来构建它们,但这种关系远非一对一 .

    将相应的库部署到/ boxer / lib,但问题没有解决,而./ld-linux-armhf.so.3 --list显示ld被链接到正确的位置,但是,正如你在下面看到的那样,其余的没有 .

    您需要使用 --prefix=/boxerld-linux 构建GLIBC以查看备用位置 . 另见this answer .

    Update:

    我误解了你的问题 . 这个命令:

    ./ld-linux-armhf.so.3 --list /boxer/frida-server
    

    并没有告诉你你想知道什么(在运行时会加载哪些库),因为它没有注意编译到应用程序中的 RPATH (它只使用编译成 ld-linux 本身的路径) .

    相反,你想要:

    LD_TRACE_LOADED_OBJECTS=1 /boxer/frida-server
    

    它显示了实际加载的库 .

相关问题