Boost logo

Boost-Build :

Subject: Re: [Boost-build] Cross compiling to 64 bit on 32 bit host
From: Bo Jensen (jensen.bo_at_[hidden])
Date: 2011-03-19 05:43:24


On Fri, Mar 18, 2011 at 5:26 PM, Vladimir Prus <ghost_at_[hidden]> wrote:
> On Friday, March 18, 2011 18:38:40 Bo Jensen wrote:
>> On Fri, Mar 18, 2011 at 2:54 PM, Vladimir Prus <ghost_at_[hidden]> wrote:
>> > On Friday, March 18, 2011 17:35:32 Bo Jensen wrote:
>> >> I am trying to build my 64 bit libraries on a 32 bit host and almost
>> >> got it right. I can build correctly with gcc when adding -m64 on the
>> >> commandline, so the libraries are all there. But when I build using
>> >> boost build, the I get the following error :
>> >>
>> >> /usr/bin/ld:
>> >> /home/bj/sulum/external/boost/bin.v2/libs/thread/build/gcc-4.4.1/release
>> >> /a
>> >> ddress-model-64/link-static/threading-multi/libboost_thread.a(thread.o)
>> >> : relocation R_X86_64_32 against `tls_destructor' can not be used when
>> >> making a shared object; recompile with -fPIC
>> >> /home/bj/sulum/external/boost/bin.v2/libs/thread/build/gcc-4.4.1/release
>> >> /ad dress-model-64/link-static/threading-multi/libboost_thread.a: could
>> >> not read symbols: Bad value
>> >> collect2: ld returned 1 exit status
>> >>
>> >> I don't think it has any thing to do with thread library, I am missing
>> >> something.
>> >>
>> >> But all files are being compiled with -fPIC, so I am a bit stuck, any
>> >> pointers appreciated ?
>> >
>> > That's a well known issue -- dynamic executable for 64 bit x86 cannot use
>> > non-fPIC code at all, and therefore using static libraries in such build
>> > results in the error you see.
>>
>> Vladimir, thanks for the reply, much appreciated.
>>
>> Hmm maybe a dumb question, but how do I then build my library
>> including boost libs into one shared library ? Right now I build a
>> bunch of static libs and included them into a shared library, from
>> what you say this is not possible on 64 bit.
>
> Bo,
>
> you have two options, basically:
>
> - You shared libraries, which is really the best approach
> - Clean your entire Boost tree (e.g. remove bin.v2), and then do:
>
>        bjam link=static cxxflags=-fPIC
>
> HTH,

Thanks.

Ok, I got it working, though I was confused by why some libraries
linked fine without -fPIC flag, turned out they were redundant and not
used any more or linked into a executable.

I still have one thing which annoys me, I think the following should work :

<library>../../../external/boost/libs/thread/build//<link>static <cxxflags>-fPIC

but it does not add the flags when compiling in thread library. Is
this intended ? For some reason it takes forever to add flags on the
commandline, so for now I just add -fPIC manually to the Jam file in
each static linked lib I use. Who can I pass on a cxxflag into another
jam file ?

>
> --
> Vladimir Prus
> http://vladimir_prus.blogspot.com
> Boost.Build: http://boost.org/boost-build2
> _______________________________________________
> Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost-build
>


Boost-Build list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk