|
Boost-Build : |
From: arvid_at_[hidden]
Date: 2007-06-20 12:56:21
I have recently bumped into a problem when building shared libraries.
On linux, all object files that are to be linked into a shared library has to
be
built with the -fPIC option. Similarly, on MacOS X, object files that are built
into an application should be built with -mdynamic-no-pic (-fPIC is the default
there).
The problem I have encountered is that -fPIC (and -mdynamic-no-pic) does not
seem to be a feature known to boost build, and hence, it is not properly
propagated as a requirement to dependencies. For instance, if I build the
following project.
--- lib a : a.cpp ; lib b : b.cpp : <library>a/<link>static ; --- like this: bjam -a link=shared i.e. building a static library "a", and a shared library "b" linking against it. I will get the following error: /usr/bin/ld: bin/gcc-4.1.2/debug/link-static/liba.a(a.o): relocation R_X86_64_32 against `__gxx_personality_v0' can not be used when making a shared object; recompile with -fPIC bin/gcc-4.1.2/debug/link-static/liba.a: could not read symbols: Bad value collect2: ld returned 1 exit status "g++" -o "bin/gcc-4.1.2/debug/libb.so" -Wl,-h -Wl,libb.so -shared -Wl,--start-group "bin/gcc-4.1.2/debug/b.o" "bin/gcc-4.1.2/debug/link-static/liba.a" -Wl,--end-group -g I believe the proper solution would be to add a features, e.g. "relocatable", so that liba.a can be built both with -fPIC and without. -- Arvid Norberg
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