Shared library relocation R_X86_64_32 solution on amd64?

Michael Hopkins michael.hopkins at hopkins-research.com
Wed Apr 27 02:23:48 PDT 2005



Hi all

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.
------------------------------------------------------------------------
gmake[1]: Leaving directory
`/usr/home/mwh/Coding/Obj-C/gnustep/core/base/Source'
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?

The first place that the gnustep-base build died was here:
---------------------------------------
/usr/bin/ld: /usr/local/lib/libcallback.a(misc.o): relocation R_X86_64_32
can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/libcallback.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
---------------------------------------

I found out that libcallback.a was installed by ffcall, so I removed that
and reinstalled it with CFLAGS += -fPIC in the makefile.  This let the build
continue.

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!

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?

TIA

Michael


_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

        _/    _/   _/_/_/             Hopkins Research Ltd
       _/    _/   _/    _/
      _/_/_/_/   _/_/_/          http://www.hopkins-research.com/
     _/    _/   _/   _/
    _/    _/   _/     _/               'touch the future'
                   
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/




More information about the freebsd-amd64 mailing list