Я пытаюсь связать boost.python с моим приложением в cmake build-system.
Самые важные части в моем CMakeList.txt :
set(Boost_USE_STATIC_LIBS OFF)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)
find_package(Boost COMPONENTS filesystem system date_time python REQUIRED)
add_definitions(-Wall -g -msse2 -fPIC)
И, конечно, включая / связывая библиотеки / заголовки библиотек boost и python.
Теперь это не с:
/usr/bin/ld: libboost_python.a(from_python.o): relocation R_X86_64_32 against `.rodata.str1.8' can not be used when making a shared object; recompile with -fPIC
libboost_python.a: could not read symbols: Bad value
Я решил пойти во временную папку сборки cmake и найти сгенерированный объектный файл (* .o) .
Я применил команду для этого:
g++ -shared FILE.cpp.o -L/usr/lib -lboost_python -o MyModule.so
В результате я получил работоспособный модуль MyModule для python! Итак, давайте посмотрим на строку компоновщика cmake и найдем разницу. Я запустил make с VERBOSE = 1 :
/usr/bin/c++ -fPIC -g -shared -Wl,-soname,libScript.so -o ../../lib/libScript.so CMakeFiles/LogManagerWrapper.cpp.o -Wl,-Bstatic -lboost_filesystem -lboost_system -lboost_date_time -lboost_python -Wl,-Bdynamic -lpython2.7
Во время исключения некоторых частей флагов компоновщика я обнаружил, что моя проблема в -Wl, -Bstatic перед тем, как повысить список библиотек.
Интересно, откуда пришел этот аргумент, потому что я заметил Boost_USE_STATIC_LIBS OFF в CMakeList.txt.
Что не так?