我想提供共享库以及我的程序,而不是因为版本差异而使用目标系统。
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
。我怎么能这样做?
答案 0 :(得分:9)
我发现了怎么做:
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
答案 1 :(得分:6)
将-nodefaultlibs
或-nostdlib
传递给gcc会告诉它不要将默认库作为参数传递给ld。然后,您将能够显式指定要链接的libc。有关这两个选项的更多详细信息和警告,请参见gcc(1)
手册页。