Shared library relocation R_X86_64_32 solution on amd64?
Michael Hopkins
michael.hopkins at hopkins-research.com
Wed Apr 27 12:39:06 PDT 2005
On 27/4/05 8:21 pm, "Kris Kennaway" <kris at obsecurity.org> wrote:
> On Wed, Apr 27, 2005 at 10:23:39AM +0100, Michael Hopkins wrote:
>>
>> I have been doing some research about why gnustep-base won't link on amd64.
>> It seems as if the problem I am getting here is quite common.
>> ------------------------------------------------------------------------
>> Making all in SSL...
>> gmake[1]: Entering directory
>> `/usr/home/mwh/Coding/Obj-C/gnustep/core/base/SSL'
>> Making all for bundle SSL...
>> Creating SSL.bundle/amd64/freebsd/gnu-gnu-gnu...
>> Compiling file GSSSLHandle.m ...
>> Linking bundle SSL ...
>> /usr/bin/ld: /usr/lib/libobjc.a(Protocol.o): relocation R_X86_64_32 can not
>> be used when making a shared object; recompile with -fPIC
>> /usr/lib/libobjc.a: could not read symbols: Bad value
>> gmake[2]: *** [SSL.bundle/amd64/freebsd/gnu-gnu-gnu/SSL] Error 1
>> gmake[1]: *** [SSL.all.bundle.variables] Error 2
>> gmake[1]: Leaving directory
>> `/usr/home/mwh/Coding/Obj-C/gnustep/core/base/SSL'
>> gmake: *** [internal-all] Error 2
>> ------------------------------------------------------------------------
>>
>> It has been mentioned a few times on this list: my understanding of this
>> issue is that you can't link to shared libraries unless they have been
>> compiled with -fPIC. Is that right?
>
> Yes, and libobjc.a isn't a shared library, so you can't link it into one.
>
Do you know why this problem appears to be specific to amd64?
>>
>> I have two main questions in this post.
>>
>> 1) What installs libobjc.a? I want to reinstall it with CFLAGS += -fPIC. I
>> assumed that it was installed by gcc-objc but after reinstalling that with
>> -fPIC the libobjc.a library was untouched!
>
> Since it's in /usr/lib, it's part of the base system. We don't seem
> to install a shared library version of that,
I may have been creating a red herring when I said it needed to link to a
shared library. I think the actual issue is linking any kind of amd64
library which hasn't been made with -fPIC into another shared library - I
await clarification from others who know better about these things.
> so you should talk to
> kan at .
>
Does this mean kan at freebsd.org? I have copied to that address in case.
>> 2) What is the standard method for dealing with this problem on amd64? I'm
>> sure it will hit a lot of people on many different ports and if it's a tier
>> 1 platform then don't we need to have a proper strategy for dealing with
>> this?
>
> Well, yeah, there is a proper strategy. "Link shared objects to
> shared libraries".
>
Did you see that the simlar earlier problem was solved by rebuilding ffcall
with -fPIC? I don't think libcallback.a is a shared library either but the
link was made possible by the rebuild.
I am still not completely clear whether the cause of this problem is:
1) the GNUstep source code
2) the GNUstep makefile
3) the FreeBSD amd64 default library setup
4) the FreeBSD amd64 'linking logic'
5) something else?
> Kris
>
Thanks for the input
Michael
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
_/ _/ _/_/_/ Hopkins Research Ltd
_/ _/ _/ _/
_/_/_/_/ _/_/_/ http://www.hopkins-research.com/
_/ _/ _/ _/
_/ _/ _/ _/ 'touch the future'
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
More information about the freebsd-amd64
mailing list