Я пытаюсь создать исполняемый файл и изменить ссылку для библиотеки надстройки на статическую.Коды, которые я пытаюсь скомпилировать: здесь .
Я использую 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
Как мне поступить?Я прошу прощения, если этот вопрос слишком специфичен для моего варианта использования, но я не могу найти других ответов, которые я не пробовал.