如何链接到不同的libc文件?

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。我该怎么做?


1
如果您只有一个可执行文件,您可能需要考虑静态链接您的程序。这样做可以避免意外丢失您的libc版本,如果他们删除您的程序,也不会留下您的libc。 - nategoose
同样的但是静态的:https://dev59.com/_Ggv5IYBdhLWcg3wNuJ5 - Ciro Santilli OurBigBook.com
2个回答

15

我找到了如何完成它的方法:

rpath指定所提供库文件的位置。该文件夹应包含:libc.so.6libdl.so.2libgcc_s.so.1,也许还有其他的。使用strace命令检查二进制文件使用哪些库文件。

ld.so是提供的链接器

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


你知道如何添加libc的调试符号吗? - Dopaz

9

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


5
注意,这篇帖子是错误的。你不需要通过那两个标志中的任何一个。 - Neeladri Vishweswaran

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接