How to link to a different libc file?
Asked Answered
K

2

11

I want to supply the shared libraries along with my program rather than using the target system's due to version differences.

ldd says my program uses these shared libs:

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)**

I have successfully linked ld-xxx.so by compiling with:

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

But I have not managed to successful link libc-xxx.so. How can I do that ?

Kapellmeister answered 28/4, 2010 at 10:19 Comment(2)
You may want to consider statically linking your program if you only have one executable. This way no one will accidentally lose your version of libc and if they remove your program they won't have your libc lingering.Orlantha
Same but statically: #10763894Mayfly
K
15

I found out how to do it:

rpath specifies where the provided libraries are located. This folder should contain: libc.so.6, libdl.so.2, libgcc_s.so.1 and maybe more. Check with strace to find out which libraries your binary file uses.

ld.so is the provided linker

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

Kapellmeister answered 30/4, 2011 at 12:45 Comment(1)
Do you know how to add libc debug symbols too?Stepdaughter
O
9

Passing -nodefaultlibs or -nostdlib to gcc will tell it to not pass the default libraries as arguments to ld. You will then be able to explicitly specify the libc you want to link against. See the gcc(1) man page for more details and caveats regarding both options.

Oceanus answered 28/4, 2010 at 13:44 Comment(1)
Note this post is wrong. You do not need to pass any of those 2 flags.Kapellmeister

© 2022 - 2024 — McMap. All rights reserved.