2016-01-20 2 views
0

Я построил новый glibc в ~/glibc/git/glibc/build. Я знаю, что я могу использовать его для запуска программы после того, как встраивание путь к нему и и соответствующий путь погрузчика, как это:Используйте библиотеку из недавно установленного glibc в сочетании с --rpath

$ 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:

$ objdump -p main 
    RPATH    /home/user/glibc/git/glibc/build 

и новый погрузчик:

$ 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. Я хочу использовать некоторые функции pthread, которые доступны только в 2.22, и поэтому я пытаюсь указать 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 в целом содержит много пакетов, и все они должны соответствовать, но, возможно, есть способ сделать то, что я хочу, или мое недочеты неверны?

+0

Я установил его, оказалось, что 'libpthread.so' в новой установке libc указывал на'/usr/local/lib/libpthread.so.0', которого не было. – user1042840

ответ

0

Я установил его, оказалось, что libpthread.so в новой установке libc указывал на /usr/local/lib/libpthread.so.0, которого не было. Я просто изменил его, указав на libpthread.so.0 в том же каталоге.