gpt4 book ai didi

c - 在执行时强制使用特定库

转载 作者:太空狗 更新时间:2023-10-29 12:11:15 26 4
gpt4 key购买 nike

我使用特定库(不是系统库)的选项编译可执行文件。编译正常。

但是当我执行这个二进制文件时,尽管指定了 LD_LIBRARY_PATH 指向这些特定的库,但我在 libc 上有一个错误,关于错误的 glib 版本 发现:

./bin: /lib/i386-linux-gnu/libc.so.6: version `GLIBC_2.17' not found (required by /home/user/ptxdist/platform-i586/sysroot-target/usr/lib/libglib-2.0.so.0)

这很正常,因为可执行文件使用系统 libc 而不是特定的 libc...可执行文件上的 ldd 显示问题:

[user ~/Desktop/gesram_x86 ] ldd -v bin 
./bin: /lib/i386-linux-gnu/libc.so.6: version `GLIBC_2.17' not found (required by /home/user/ptxdist/platform-i586/sysroot-target/usr/lib/libglib-2.0.so.0)
linux-gate.so.1 => (0xb7704000)
libgesram.so.0 => /home/user/Desktop/gesram_x86/gesram/lib_gesram/.libs/libgesram.so.0 (0xb76f9000)
libsofutils.so.0 => /home/user/ptxdist/platform-i586/sysroot-target/applications/base/lib/libsofutils.so.0 (0xb76f1000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb7531000)
libglib-2.0.so.0 => /home/user/ptxdist/platform-i586/sysroot-target/usr/lib/libglib-2.0.so.0 (0xb7403000)
libgio-2.0.so.0 => /home/user/ptxdist/platform-i586/sysroot-target/usr/lib/libgio-2.0.so.0 (0xb721b000)
libgobject-2.0.so.0 => /home/user/ptxdist/platform-i586/sysroot-target/usr/lib/libgobject-2.0.so.0 (0xb71bc000)
libffi.so.6 => /home/user/ptxdist/platform-i586/sysroot-target/usr/lib/libffi.so.6 (0xb71b3000)
libpcre.so.1 => /home/user/ptxdist/platform-i586/sysroot-target/usr/lib/libpcre.so.1 (0xb713b000)
libgmodule-2.0.so.0 => /home/user/ptxdist/platform-i586/sysroot-target/usr/lib/libgmodule-2.0.so.0 (0xb7137000)
libz.so.1 => /home/user/ptxdist/platform-i586/sysroot-target/usr/lib/libz.so.1 (0xb711c000)
librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0xb7112000)
libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xb70f6000)
/lib/ld-linux.so.2 (0xb7705000)
libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xb70f1000)

Version information:
./bin:
libc.so.6 (GLIBC_2.0) => /lib/i386-linux-gnu/libc.so.6
/home/user/Desktop/gesram_x86/gesram/lib_gesram/.libs/libgesram.so.0:
libpthread.so.0 (GLIBC_2.0) => /lib/i386-linux-gnu/libpthread.so.0
libc.so.6 (GLIBC_2.1.3) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.0) => /lib/i386-linux-gnu/libc.so.6
/home/user/ptxdist/platform-i586/sysroot-target/applications/base/lib/libsofutils.so.0:
librt.so.1 (GLIBC_2.2) => /lib/i386-linux-gnu/librt.so.1
libpthread.so.0 (GLIBC_2.0) => /lib/i386-linux-gnu/libpthread.so.0
libc.so.6 (GLIBC_2.3.4) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.8) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.1.3) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.4) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.0) => /lib/i386-linux-gnu/libc.so.6
/lib/i386-linux-gnu/libc.so.6:
ld-linux.so.2 (GLIBC_2.3) => /lib/ld-linux.so.2
ld-linux.so.2 (GLIBC_PRIVATE) => /lib/ld-linux.so.2
ld-linux.so.2 (GLIBC_2.1) => /lib/ld-linux.so.2
/home/user/ptxdist/platform-i586/sysroot-target/usr/lib/libglib-2.0.so.0:
libpthread.so.0 (GLIBC_2.12) => /lib/i386-linux-gnu/libpthread.so.0
libpthread.so.0 (GLIBC_2.2) => /lib/i386-linux-gnu/libpthread.so.0
libpthread.so.0 (GLIBC_2.1) => /lib/i386-linux-gnu/libpthread.so.0
libpthread.so.0 (GLIBC_2.0) => /lib/i386-linux-gnu/libpthread.so.0
libc.so.6 (GLIBC_2.9) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.11) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.8) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.7) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.1.3) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.15) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.4) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.2) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.17) => not found
libc.so.6 (GLIBC_2.1.2) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.3.4) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.1) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.0) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.3) => /lib/i386-linux-gnu/libc.so.6
/home/user/ptxdist/platform-i586/sysroot-target/usr/lib/libgio-2.0.so.0:
libz.so.1 (ZLIB_1.2.2) => /home/user/ptxdist/platform-i586/sysroot-target/usr/lib/libz.so.1
libpthread.so.0 (GLIBC_2.2) => /lib/i386-linux-gnu/libpthread.so.0
libpthread.so.0 (GLIBC_2.0) => /lib/i386-linux-gnu/libpthread.so.0
libc.so.6 (GLIBC_2.9) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.1.2) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.12) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.14) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.3.4) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.1.3) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.2.3) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_PRIVATE) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.4) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.5) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.1) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.2) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.3) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.0) => /lib/i386-linux-gnu/libc.so.6
/home/user/ptxdist/platform-i586/sysroot-target/usr/lib/libgobject-2.0.so.0:
libc.so.6 (GLIBC_2.3.4) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.1.3) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.4) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.0) => /lib/i386-linux-gnu/libc.so.6
/home/user/ptxdist/platform-i586/sysroot-target/usr/lib/libffi.so.6:
libc.so.6 (GLIBC_2.1.3) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.7) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.4) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.1) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.0) => /lib/i386-linux-gnu/libc.so.6
/home/user/ptxdist/platform-i586/sysroot-target/usr/lib/libpcre.so.1:
libpthread.so.0 (GLIBC_2.0) => /lib/i386-linux-gnu/libpthread.so.0
libc.so.6 (GLIBC_2.3.4) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.1.3) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.4) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.0) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.3) => /lib/i386-linux-gnu/libc.so.6
/home/user/ptxdist/platform-i586/sysroot-target/usr/lib/libgmodule-2.0.so.0:
libpthread.so.0 (GLIBC_2.0) => /lib/i386-linux-gnu/libpthread.so.0
libpthread.so.0 (GLIBC_2.2) => /lib/i386-linux-gnu/libpthread.so.0
libdl.so.2 (GLIBC_2.1) => /lib/i386-linux-gnu/libdl.so.2
libdl.so.2 (GLIBC_2.0) => /lib/i386-linux-gnu/libdl.so.2
libc.so.6 (GLIBC_2.1.3) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.0) => /lib/i386-linux-gnu/libc.so.6
/home/user/ptxdist/platform-i586/sysroot-target/usr/lib/libz.so.1:
libc.so.6 (GLIBC_2.1) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.1.3) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.4) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.0) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.3.4) => /lib/i386-linux-gnu/libc.so.6
/lib/i386-linux-gnu/librt.so.1:
libpthread.so.0 (GLIBC_2.1) => /lib/i386-linux-gnu/libpthread.so.0
libpthread.so.0 (GLIBC_PRIVATE) => /lib/i386-linux-gnu/libpthread.so.0
libpthread.so.0 (GLIBC_2.0) => /lib/i386-linux-gnu/libpthread.so.0
libpthread.so.0 (GLIBC_2.2) => /lib/i386-linux-gnu/libpthread.so.0
libc.so.6 (GLIBC_2.3.2) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.1.3) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.1) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_PRIVATE) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.2) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.0) => /lib/i386-linux-gnu/libc.so.6
/lib/i386-linux-gnu/libpthread.so.0:
ld-linux.so.2 (GLIBC_2.1) => /lib/ld-linux.so.2
ld-linux.so.2 (GLIBC_PRIVATE) => /lib/ld-linux.so.2
ld-linux.so.2 (GLIBC_2.3) => /lib/ld-linux.so.2
libc.so.6 (GLIBC_2.3.2) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.1.3) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.1) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_PRIVATE) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.0) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.2) => /lib/i386-linux-gnu/libc.so.6
/lib/i386-linux-gnu/libdl.so.2:
ld-linux.so.2 (GLIBC_PRIVATE) => /lib/ld-linux.so.2
libc.so.6 (GLIBC_PRIVATE) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.1.3) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.1) => /lib/i386-linux-gnu/libc.so.6
libc.so.6 (GLIBC_2.0) => /lib/i386-linux-gnu/libc.so.6

所有指向/lib//usr/lib/ 库的链接都是错误的...

这是我的编译命令:

/opt/OSELAS.Toolchain-2016.06.0/toolchain-i586/bin/i586-unknown-linux-gnu-gcc -o bin fichier.c -I/home/user/include -I/home/usr/ptxdist/platform-i586/sysroot-target/usr/include/glib-2.0/ -Wl,-rpath,gesram/lib_gesram/.libs/ -Lgesram/lib_gesram/.libs/ -lgesram -Wl,-rpath,/home/user/ptxdist/platform-i586/sysroot-target/applications/base/lib/ -L/home/user/ptxdist/platform-i586/sysroot-target/applications/base/lib/ -lsofutils -Wl,-rpath,/opt/OSELAS.Toolchain-2016.06.0/toolchain-i586/sysroot-i586-unknown-linux-gnu/usr/lib/ -L/opt/OSELAS.Toolchain-2016.06.0/toolchain-i586/sysroot-i586-unknown-linux-gnu/usr/lib/ -lc -Wl,-rpath,/home/user/ptxdist/platform-i586/sysroot-target/usr/lib/ -L/home/user/ptxdist/platform-i586/sysroot-target/usr/lib/ -lglib-2.0 -lgio-2.0 -lgobject-2.0 -lffi -lpcre -lgmodule-2.0 -lz

这是一种在执行时强制使用特定库的方法吗?

LD_DEBUG=all ./bin 的部分输出(感谢 Ctx):

 24006: file=libc.so.6 [0];  needed by ./bin [0]
24006: find library=libc.so.6 [0]; searching
24006: search path=/home/ggau/Desktop/gesram_x86/gesram/lib_gesram/.libs:/home/ggau/integration/ptxdist/platform-i586/sysroot-target/applications/base/lib:/opt/OSELAS.Toolchain-2016.06.0/toolchain-i586/sysroot-i586-unknown-linux-g
[...]
24006: trying file=/opt/OSELAS.Toolchain-2016.06.0/toolchain-i586/sysroot-i586-unknown-linux-gnu/lib/sse2/libc.so.6
24006: trying file=/opt/OSELAS.Toolchain-2016.06.0/toolchain-i586/sysroot-i586-unknown-linux-gnu/lib/cmov/libc.so.6
24006: trying file=/opt/OSELAS.Toolchain-2016.06.0/toolchain-i586/sysroot-i586-unknown-linux-gnu/lib/libc.so.6
24006: search cache=/etc/ld.so.cache
24006: trying file=/lib/i386-linux-gnu/libc.so.6
24006:
24006: file=libc.so.6 [0]; generating link map
24006: dynamic: 0xb77a4d7c base: 0xb75fd000 size: 0x001abadc
24006: entry: 0xb7616690 phdr: 0xb75fd034 phnum: 10

我不明白为什么可执行文件不使用此文件 /opt/OSELAS.Toolchain-2016.06.0/toolchain-i586/sysroot-i586-unknown-linux-gnu/lib/libc.so。 6 因为它是好文件...

lrwxrwxrwx 1 root root 12 May 31 17:45 /opt/OSELAS.Toolchain-2016.06.0/toolchain-i586/sysroot-i586-unknown-linux-gnu/lib/libc.so.6 -> libc-2.23.so*

它在尝试 /lib/i386-linux-gnu/libc.so.6 之前尝试这个文件...

最佳答案

简而言之,您不能强制应用程序使用您自己的 GLIBC,而无需提供您自己的 GLIBC native 动态链接器。

64 位:

-Wl,--rpath=<path to glibc 64-bit libs>
-Wl,--dynamic-linker=<path to glibc 64-bit libs>/ld-linux-x86-64.so.2

32 位:

-Wl,--rpath=<path to glibc 32-bit libs>
-Wl,--dynamic-linker=<path to glibc 32-bit libs>/ld-linux.so.2

关于c - 在执行时强制使用特定库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44693360/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com