11

由于版本差异,我想与我的程序一起提供共享库,而不是使用目标系统。

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。我怎样才能做到这一点 ?

4

2 回答 2

15

我发现了如何做到这一点:

rpath 指定提供的库的位置。此文件夹应包含:、、libc.so.6甚至更多。检查 strace 以找出您的二进制文件使用哪些库。libdl.so.2libgcc_s.so.1

ld.so是提供的链接器

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

于 2011-04-30T12:45:24.253 回答
9

-nodefaultlibs将or传递-nostdlib给 gcc 将告诉它不要将默认库作为参数传递给 ld。然后,您将能够明确指定要链接的 libc。有关这两个选项的更多详细信息和注意事项,请参见gcc(1)手册页。

于 2010-04-28T13:44:27.853 回答