This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: system inc and dynamic linker change


Hi,
   seems like I got it working the way I wanted it, this is what I did:

(On Suse linux 8 with glibc 2.2)

Configure, compile and install glibc-2.3.5 into /opt23

--------------------------
Configure and compile binutils against glibc-2.3.5 headers, then in the binutils src dir:


find . -name Makefile -a -exec grep -q "^LDFLAGS[[:space:]]*=" '{}' \; -a -print | while read i ; do mv $i $i.ori ; cat $i.ori | awk -- '/^LDFLAGS[[:space:]]*=[[:space:]]*$/ { print "LDFLAGS = -B /opt23/lib -Wl,-rpath-link,/opt23/lib,--dynamic-linker,/opt23/lib/ld-linux.so.2"; }\
! /^LDFLAGS[[:space:]]*=[[:space:]]*$/ { print }' > $i ; done


Now I ran "make" again, then "make install"
This way I got as,ld,ar,... linked with new glibc.

---------------------------
For gcc, first I edited "gcc-3.4.4/gcc/config/i386/linux.h" file in the gcc source directory and replaced:


%{!dynamic-linker:-dynamic-linker /lib/ld-linux.so.2}}

with:

%{!dynamic-linker:-dynamic-linker /opt23/lib/ld-linux.so.2}}


Set CFLAGS, CXXFLAGS to: "-B /opt23/bin -B /opt23/lib -isystem /opt23/usr/include"

In the build directory I ran:
"../gcc-3.4.4/configure --with-sysroot=/opt23 --enable-threads=posix --prefix=/opt23"


Then edited the created Makefile to change:
LDFLAGS =

into
LDFLAGS = -B /opt23/lib
-Wl,-rpath-link,/opt23/lib,--dynamic-linker,/opt23/lib/ld-linux.so.2

Now a quick "make", "make install" and I got myself a gcc in /opt23/bin
(need to put it into first place of $PATH) that creates executables that are linked against /opt23/lib/ld-linux.so.2 and /opt23/lib/libc.so.6


$ gcc -o test test.c
$ ldd ./test
        libc.so.6 => /opt23//lib/libc.so.6 (0x4001b000)
        /opt23/lib/ld-linux.so.2 (0x40000000)

I tested moving /opt/include/stdio.h away, gcc cannot find it anymore, so it searches system headers at the new place.
Of course I need to test it further.


Why is it that the configure script for gcc-3.4.4 creates a Makefile that destroys the LDFLAGS env variable ?

Now I'm going to try and build some real programs...

bye, krajo

On Thu, 15 Sep 2005, Aseem Rastogi wrote:

did you try compiling gcc itself with -Wl,--dynamic-linker ? the new gcc then should then default link to ur custom glibc. also, if you can find some solution to shared library problem that i mentioned, it would be very helpful.

aseem.

KRAJCSOVITS Gyorgy wrote:

Hi, thanks for the reply,

yes -Wl,--dynamic-linker works, but when I'm compiling big programs it is sometimes impossible (ok, very hard) to change the linker for every link step. It would be better to have gcc (or ld) automatically do this.
And I need gcc to search other directories for system header files as well.



bye, krajo


On Thu, 15 Sep 2005, Aseem Rastogi wrote:

i am not sure about existing application but for a new program -Wl,--dynamic-linker option works. i successfully did it for simple hello world kind of programs but when i created shared libraries using this option, it didn;t work and they seemed to be linked to default linker.

try compiling gcc with this option to escape --dynamic-linker everytime.

regards,
aseem.

KRAJCSOVITS Gyorgy wrote:

Hi,

  I'd like to compile a gcc that uses:
- /opt23/usr/include instead of /usr/include
  (and similar for other system include dirs)

- instructs linker to use /opt23/lib/ld-linux.so.2 instead of
  /lib/ld-linux.so.2
  (Maybe this is a binutils issue, but it seems like binutils gets its
  deafults from gcc when compiling binutils)

The idea is to be able to compile programs for another glibc, but I'm not root, so I won't be able to use it in it's normal location. So /lib/ld-linux.so.2 won't point to the new one. I tried to create a cross compile toolchain but was unsuccessfull so far.

Is there a way to change the dynamic linker of an existing application ?

From /lib/ld-linux.so.2 to /opt23/lib/ld-linux.so.2 ?



bye, krajo





--
The end is always good. If it's not good, it's not the end.






--
The end is always good. If it's not good, it's not the end.





Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]