user598208
user598208

Reputation: 227

How do I link to a non-default glibc library?

I have successfully cross-compiled a program on an x86-64 machine. However, when I try to run on my target machine sh4a, I get the following error: ./ioq3ded.sh4a: /lib/libc.so.6: version `GLIBC_2.11' not found (required by ./ioq3ded.sh4a)

The details of the two machines are as follows: Compiling machine architecture: x86-64 LIBC version: 2.11

Executing mechine architecture: sh4a LIBC version: 2.5

Programming Language is C

Therefore, as a solution, I tried to compile a 2.11 LIBC library on the sh4a machine. However, it failed because the GCC compiler on the sh4a machine was too old, I don't have the authority, nor is there a possibility for upgrading the GCC. Furthermore, as an alternative solution, I tried to compile a 2.5 LIBC library on the x86-64 so I can link to them during cross-compilation time. However, the ./configure failed because there were missing required objects. Moreover, I tried to -static compile the program. However, it failed: As for ioquake3, I tried to statically build it: /bin/ld: /r/home7/usr/lib/libc.a(dl-tsd.o): TLS local exec code cannot be linked into shared objects It seems impossible to statically build it with the old version of gcc we have. I looked up this problem: https://bugs.gentoo.org/show_bug.cgi?id=122665

Moreover, I downloaded the LIBC 2.5 for x86-64 from the net: http://rpm.pbone.net/index.php3/stat/4/idpl/12884473/dir/startcom_5/com/glibc-2.5-34.x86_64.rpm.html[^]

However, I cannot seem to find the right flags for compiling so that it links against MY specific (2.5 version library) rather than the system ones (2.11 version library).

Here comes my question: * What should be the "make" flags be? considering that the folder where MY (2.5 version library) is: ./glibc-2_5/lib64/libc.so And, my make is as follows: make USE_LOCAL_HEADERS=0 ARCH=sh4a CFLAGS='-fopenmp -Wall -D_GNU_SOURCE=1 -D_REENTRANT' USE_VOIP=0 BUILD_CLIENT=0 BUILD_MISSIONPACK=0

Upvotes: 2

Views: 1184

Answers (1)

ams
ams

Reputation: 25559

You can simply copy the Glibc files from the toolchain into the SH4A machine.

If you do not wish to overwrite the existing libc files then try a chroot, or, if that can't work for you, put them somewhere else, and then add the following options to your link command:

-Wl,-rpath,/path/to/alternative/lib -Wl,-dynamic-linker,/path/to/alternative/lib/ld-linux.so

The paths should be as they are on the SH4A target machine, not the x86_64 build machine.

Upvotes: 3

Related Questions