Библиотека повышения статических ссылок с общей библиотекой в ​​CMakeLists.txt - PullRequest
0 голосов
/ 26 ноября 2018

Я пытаюсь создать исполняемый файл и изменить ссылку для библиотеки надстройки на статическую.Коды, которые я пытаюсь скомпилировать: здесь .

Я использую 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

Что я сделал: Установите для библиотеки Boost статическую ссылку в CMakeLists.txt (пример):

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, поэтому я сделал вышедля 3 из них, использующих Boost.

Затем я установил флаг компилятора на -fPIC для CMAKE_CXX_FLAGS и CMAKE_CXX_FLAGS_DEBUG, например:

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

Опять же, я сделал это для всех CMakeLists, которыеимеют переменные CMAKE_CXX_FLAGS и CMAKE_CXX_FLAGS_DEBUG.

Наконец, я перекомпилирую boost с опцией -fPIC.Я скачал файл boost.tar.gz из sourceforge, распаковал его и запустил:

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

Как мне поступить?Я прошу прощения, если этот вопрос слишком специфичен для моего варианта использования, но я не могу найти других ответов, которые я не пробовал.

...