CMake:
У нас есть зависимость от cpp-netlib.
Мы собираем его из исходного кода как часть нашей системы сборки.
cpp-netlib/CMakeLists.txt
:
add_library(cpp-netlib
STATIC
${SRCS})
В одном конкретном случае мы должны использовать его в общей библиотеке, поэтому я создал вторую библиотеку с включенным -fPIC
:
add_library(cpp-netlib_pic
STATIC
${SRCS})
set_property(TARGET cpp-netlib_pic PROPERTY POSITION_INDEPENDENT_CODE)
Затем в моей общей библиотеке я ссылаюсь на libcpp-netlib_pic.a
foo/CMakeLists.txt
:
add_library(foo
SHARED
${SRCS})
target_link_libraries(foo cpp-netlib_pic)
Я получаю сообщение об ошибке компоновщика, потому что cpp-netlib
пытается связать не-pic версию boost_network
/usr/bin/ld: ../third_party/cpp-netlib/libcpp-netlib_pic.a(client.cpp.o): \
relocation R_X86_64_32 against `_ZTVN5boost7network4http4impl15normal_delegateE' \
can not be used when making a shared object; recompile with -fPIC
Расшифрованное имя:
$ c++filt _ZTVN5boost7network4http4impl15normal_delegateE
vtable for boost::network::http::impl::normal_delegate
Ускоренная сборка:
Это все часть миграции нашей существующей системы сборки с boost-build на CMake.
Jamfiles с ускоренной сборкой работают нормально.
Jamroot
:
variant pic : release : <cxxflags>-fPIC ;
cpp-netlib/Jamfile
:
lib cpp-netlib
: [ glob src/*.cpp ]
;
foo/Jamfile
:
shared-lib foo
: [ glob *.cpp ]
/ext/cpp-netlib//cpp-netlib/<variant>pic
: <link>shared
<cxxflags>-fPIC
;
Это работает.
Обратите внимание, что нигде не упоминается boost::network
, хотя в cpp-netlib/boost/library
есть подпапка, но она содержит только заголовки.
Вопрос:
Как сообщить CMake, что cpp-netlib_pic
нужно использовать версию изображения boost_network
?
bjam cxxflags=-fPIC
)? - person rustyx   schedule 28.08.2016boost_network
как с изображением, так и без изображения? - person Leon   schedule 28.08.2016boost-build
, так что это проблема с настройкой CMake, а не с отсутствием правильных версий сборки. - person Steve Lorimer   schedule 29.08.2016boost-build
, что, я думаю, показывает, что проблема связана с настройкой CMake, а не с отсутствием правильной сборкиboost_network
. - person Steve Lorimer   schedule 29.08.2016cpp-netlib_pic
не строится с-fPIC
. Дополнительные сведения см. в этом вопросе. - person Steve Lorimer   schedule 29.08.2016cpp-netlib_pic
не строится с-fPIC
. Дополнительные сведения см. в этом вопросе. - person Steve Lorimer   schedule 29.08.2016