2016-01-20 61 views
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 

這甚至可能到一個新的pthreadlibc在這裏使用?我知道一箇舊的libc仍然用於構建這個程序,整個libc包含很多包,它們都必須匹配,但也許有一種方法可以做我想要的或我的低估不正確?

+0

我修正了這個問題,原來新libc安裝中的'libpthread.so'指向不存在的'/ usr/local/lib/libpthread.so.0'。 – user1042840

回答

0

我修正了它,結果發現新libc安裝中的libpthread.so指向不存在的/usr/local/lib/libpthread.so.0。我只是將其修改爲指向同一個目錄中的libpthread.so.0