我编译了一个可执行文件,可以选择使用特定库(而不是系统库)。编译正常。
但是当我执行这个二进制文件时,尽管指定了指向这些特定库的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之前尝试此文件...
发布于 2017-06-22 16:59:07
简而言之,如果不提供您自己的GLIBC原生动态链接器,就不能强制应用程序使用您自己的GLIBC。
64位:
-Wl,--rpath=<path to glibc 64-bit libs>
-Wl,--dynamic-linker=<path to glibc 64-bit libs>/ld-linux-x86-64.so.232位:
-Wl,--rpath=<path to glibc 32-bit libs>
-Wl,--dynamic-linker=<path to glibc 32-bit libs>/ld-linux.so.2https://stackoverflow.com/questions/44693360
复制相似问题