2017-04-12 205 views
0

在1.63.0庫libboost_regex-mt.a連接升壓到共享庫中,我得到的錯誤:不能boost庫鏈接到共享庫

/usr/bin/ld: /usr/local/lib/libboost_regex-mt.a(instances.o): relocation R_X86_64_32S against `.rodata' can not be used when making a shared object; recompile with -fPIC 
/usr/local/lib/libboost_regex-mt.a: could not read symbols: Bad value 

其實我已經編譯加強與-fPIC使用下面的命令(又見here):

./bjam '-sBUILD=<cxxflags>-fPIC <linkflags>-fPIC' --without-mpi --without-python --without-iostreams --layout=tagged link=shared,static 

當執行bjam的調試版本,似乎只的bjam似乎兌現了-fPIC一些源文件,其他文件(包括instances.cpp從正則表達式庫)與編譯出它:

gcc.compile.c++ bin.v2/libs/regex/build/gcc-4.8/release/link-static/threading-multi/instances.o 

    "g++" -ftemplate-depth-128 -O3 -finline-functions -Wno-inline -Wall -pedantic -pthread -m64 -DBOOST_ALL_NO_LIB=1 -DNDEBUG -I"." -c -o "bin.v2/libs/regex/build/gcc-4.8/release/link-static/threading-multi/instances.o" "libs/regex/build/../src/instances.cpp" 

如何強制的bjam使用-fPIC標誌的所有文件?

回答

1

生成升壓1.63,共享庫:

./b2 --without-mpi --without-python --without-iostreams --layout=tagged link=shared runtime-link=shared link=static install 

穿線=多:

./b2 --without-mpi --without-python --without-iostreams --layout=tagged threading=multi link=shared runtime-link=shared link=static install 

「正則表達式」 的結果:ls *regex*

libboost_regex.a 
libboost_regex-mt.a 
[email protected] 
libboost_regex-mt.so.1.63.0* 
[email protected] 
libboost_regex.so.1.63.0* 
+0

的threading_multi命令仍然建立無-fPIC,例如''g ++「-ftemplate -depth-128 -O3 -finline-functions -Wno-inline -Wall -pedantic -pthread -m64 -DBOOST_ALL_NO_LIB = 1 -DNDEBUG -I」。「 -c -o「bin.v2/libs/regex/build/gcc-4.8/release/link-static/threading-multi/instances.o」「libs/regex/build /../ src/instances.cpp」 – sakra