Как сделать ссылку на другой файл libc? - PullRequest
7 голосов
/ 28 апреля 2010

Я хочу предоставлять совместно используемые библиотеки вместе с моей программой, а не использовать целевую систему из-за различий в версиях.

ldd говорит, что моя программа использует эти общие библиотеки:

linux-gate.so.1 =>  (0xf7ef0000)**(made by kernel)**  
libc.so.6 => /lib32/libc.so.6 (0xf7d88000)**(libc-2.7.so)**  
/lib/ld-linux.so.2 (0xf7ef1000)**(ld-2.7.so)**

Я успешно связал ld-xxx.so, скомпилировав:

gcc -std=c99 -D_POSIX_C_SOURCE=200112L -O2 -m32 -s -Wl,-dynamic-linker,ld-2.7.so myprogram.c

Но мне не удалось на успешную ссылку libc-xxx.so. Как я могу это сделать?

Ответы [ 2 ]

9 голосов
/ 30 апреля 2011

Я узнал, как это сделать:

rpath указывает, где находятся предоставленные библиотеки. Эта папка должна содержать: libc.so.6, libdl.so.2, libgcc_s.so.1 и, возможно, больше. Проверьте с помощью strace, какие библиотеки использует ваш двоичный файл.

ld.so является предоставленным компоновщиком

gcc -Xlinker -rpath=/default/path/to/libraries -Xlinker -I/default/path/to/libraries/ld.so program.c

6 голосов
/ 28 апреля 2010

Передача -nodefaultlibs или -nostdlib в gcc скажет ему не передавать библиотеки по умолчанию в качестве аргументов ld. После этого вы сможете явно указать libc, с которым вы хотите связать. См. Справочную страницу gcc(1) для получения более подробной информации и предостережений относительно обоих вариантов.

...