0
我在~/glibc/git/glibc/build
中构建了新的glibc
。我知道,我可以用它来启动程序嵌入到它和一个路径和对应的路径之后,装载机是这样的:使用新安装的glibc中的库与--rpath
$ objdump -p main
RPATH /home/user/glibc/git/glibc/build
和:
$ gcc main.c -o main -Wl,--rpath=$HOME/glibc/git/glibc/build -Wl,--dynamic-linker=$HOME/glibc/git/glibc/build/elf/ld-linux-x86-64.so.2
main
将由一个新的libc启动新的装载机:
$ LD_TRACE_LOADED_OBJECTS=1 ./main
linux-vdso.so.1 (0x00007fff92df2000)
libc.so.6 => /home/user/glibc/git/glibc/build/libc.so.6 (0x00007f1097055000)
/home/user/glibc/git/glibc/build/elf/ld-linux-x86-64.so.2 (0x00007f10973f5000)
我安装了一个新版本glibc
2.22至~/glibc-destdir1
。我有2.17安装在/lib64
。我想使用一些仅在2.22中可用的pthread
函数,因此我尝试指向gcc
以使用新的libpthread.so
,但它不起作用。该命令失败:
$ LIBRARY_PATH=$HOME/glibc-destdir1/usr/local/lib gcc -std=c99 -Wl,--rpath=$HOME/glibc/git/glibc/build -Wl,--dynamic-linker=$HOME/glibc/git/glibc/build/elf/ld-linux-x86-64.so.2 thread.c -o thread -pthread
/tmp/ccSxKt9O.o: In function `thr':
thread.c:(.text+0x2f): undefined reference to `pthread_getattr_default_np'
/tmp/ccSxKt9O.o: In function `run_threads':
thread.c:(.text+0x153): undefined reference to `pthread_setattr_default_np'
/tmp/ccSxKt9O.o: In function `verify_affinity_result':
thread.c:(.text+0x4eb): undefined reference to `CPU_ISSET'
/tmp/ccSxKt9O.o: In function `do_affinity_test':
thread.c:(.text+0x571): undefined reference to `CPU_ZERO'
thread.c:(.text+0x58a): undefined reference to `CPU_SET'
/tmp/ccSxKt9O.o: In function `do_guardsize_test':
thread.c:(.text+0xa20): undefined reference to `pthread_getattr_default_np'
collect2: error: ld returned 1 exit status
这甚至可能到一个新的pthread
和libc
在这里使用?我知道一个旧的libc
仍然用于构建这个程序,整个libc
包含很多包,它们都必须匹配,但也许有一种方法可以做我想要的或我的低估不正确?
我修正了这个问题,原来新libc安装中的'libpthread.so'指向不存在的'/ usr/local/lib/libpthread.so.0'。 – user1042840