From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ian Lance Taylor To: K.Peeters@damtp.cam.ac.uk Cc: binutils@sourceware.cygnus.com Subject: Re: adding rpath to existing executable Date: Thu, 01 Jul 1999 00:00:00 -0000 Message-id: <19990621023358.8435.qmail@daffy.airs.com> References: <14187.31671.962776.583046@hopf.amtp.cam.ac.uk> <19990619164906.24379.qmail@daffy.airs.com> <14189.24404.190234.153358@hopf.amtp.cam.ac.uk> <14189.24404.190234.153358@hopf.amtp.cam.ac.uk> X-SW-Source: 1999-q2/msg00294.html From: Kasper Peeters Date: Sun, 20 Jun 1999 22:38:28 +0100 (BST) > Is there a simple way to add an RPATH to an already existing > executable using binutils? (this is on i386 elf) > > No. Ok, let me ask this in a different way ;-) Is there a _complicated_ way to add an RPATH to an already existing executable using binutils? I looked at libbfd for half an hour, and it seems like I could just read the executable file using bfd_openr and friends, add the rpath to the private data and write it back. But I find it hard to believe that nobody else has had a need for such a program before. You could do that, but it wouldn't work. That is because RPATH goes into a loadable segment. When you changed the size of the RPATH, you would be adjusting the position of everything else in that segment. The program was linked to expect things to be at a certain position. When you change that position, the program will no longer work. Is libbfd capable of doing this or is more trickery involved that I am not aware of? libbfd is capable of changing the RPATH in certain circumstances which Richard mentioned: when you can find some place to squeeze it in. But you have to do all the work yourself. I've never known anybody to want to change the RPATH of a linked executable. Mostly, people just run a shell script which sets LD_LIBRARY_PATH. Otherwise, they rebuild the program, or in extreme cases they hack the dynamic linker. Ian