Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 27 Apr 2005 10:23:39 +0100
From:      Michael Hopkins <michael.hopkins@hopkins-research.com>
To:        "freebsd-amd64@freebsd.org" <freebsd-amd64@freebsd.org>
Subject:   Shared library relocation R_X86_64_32 solution on amd64?
Message-ID:  <BE9518AB.38FC5%michael.hopkins@hopkins-research.com>

next in thread | raw e-mail | index | archive | help


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'
                   
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?BE9518AB.38FC5%michael.hopkins>