静态链接增强库和CMakeLists.txt

时间:2018-11-26 17:07:09

标签: c++ boost cmake static-libraries

我正在尝试构建可执行文件,并将boost库的链接更改为静态。我要编译的代码是here

我正在使用Xubuntu 14.04,cmake 3.5.1,boost 1.54。

我得到的错误是:

Linking CXX shared library ../../lib/librexd.so
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libboost_system.a(error_code.o): relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libboost_system.a: error adding symbols: Bad value

我所做的事情: 在CMakeLists.txt中将boost库设置为静态链接(示例):

set(Boost_USE_STATIC_LIBS ON)
FIND_PACKAGE(Boost 1.46.0 COMPONENTS system regex program_options thread filesystem REQUIRED)
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS})
TARGET_LINK_LIBRARIES(rexd ${Boost_LIBRARIES})

有很多CMakeLists.txt,所以我对其中三个使用Boost的软件做了以上操作。

接下来,我将CMAKE_CXX_FLAGS和CMAKE_CXX_FLAGS_DEBUG的编译器标志设置为-fPIC,例如:

SET (CMAKE_CXX_FLAGS                "-D_REENTRANT -fpic")
SET (CMAKE_CXX_FLAGS_DEBUG          "-g -Wall -fpic")

同样,我对所有具有CMAKE_CXX_FLAGS和CMAKE_CXX_FLAGS_DEBUG变量的CMakeList都这样做。

最后,我使用-fPIC选项重新编译boost。我从sourceforge下载boost.tar.gz,将其解压缩并运行:

bjam clean
bjam -d+2 link=static cxxflags="-fPIC" install

但是,这似乎没有任何改变。 libboost_system.a的日期修改是在几年前。

我尝试修改add_library,使其保持静态

ADD_LIBRARY(rexd STATIC ${sources_symbolic} ${sources_parsers} ${sources_lfit} ${sources_teacher} ${sources_rexd} ${sources_ippc_planner})

我在找不到标题.h的地方出现了此错误:

No such file or directory

我应该如何进行?如果这个问题对我的用例来说太过具体,我深表歉意,但是我找不到我没有尝试过的其他答案。

0 个答案:

没有答案