Я знаю, что этот вопрос задавался много раз прежде, всегда заканчиваясь тем же ответом ... добавьте -DBOOST_LOG_DYN_LINK
к вашему CMakeLists.txt
файлу.
Однако, у меня было это в моем cmakeдавно и все связывалось без проблем.Теперь я решил переключиться на Ubuntu 18.04 с 16.04 и обновлять свои проекты один за другим ....
Это мой файл cmake:
cmake_minimum_required(VERSION 2.8.4)
project(FOO)
find_package(Boost REQUIRED COMPONENTS system timer filesystem log program_options unit_test_framework)
find_package(CGAL COMPONENTS Core)
find_library(OPEN_MESH_CORE_LIBRARY OpenMeshCore /usr/local/lib/OpenMesh REQUIRED)
find_library(YAML_CPP_LIBRARY yaml-cpp REQUIRED)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
find_package(PkgConfig REQUIRED)
pkg_check_modules(JSONCPP jsoncpp)
link_libraries(${JSONCPP_LIBRARIES})
include_directories(${JSONCPP_INCLUDE_DIRS})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffast-math -fopenmp -msse2 -march=native -W -Wall -std=c++11")
add_definitions(-DBOOST_LOG_DYN_LINK=1)
add_definitions(-DUNIT_TEST_DATA="${CMAKE_SOURCE_DIR}/data")
include( ${CGAL_USE_FILE} )
include( CGAL_CreateSingleSourceCGALProgram )
set(SOURCE_FILES
Foo1.cpp
Foo2.cpp
Foo3.cpp)
add_executable(FOO main.cpp ${SOURCE_FILES})
target_include_directories(FOO PRIVATE ${JsonCpp_INCLUDE_DIRS})
target_link_libraries(FOO ${OPEN_MESH_CORE_LIBRARY} ${Boost_LIBRARIES} ${YAML_CPP_LIBRARY} ${JSONCPP_LIBRARIES})
add_library(foo SHARED ${SOURCE_FILES})
target_link_libraries(foo ${OPEN_MESH_CORE_LIBRARY} ${Boost_LIBRARIES} ${YAML_CPP_LIBRARY} ${JSONCPP_LIBRARIES})
add_executable(tests test.cpp ${SOURCE_FILES})
target_include_directories(FOO PRIVATE ${JsonCpp_INCLUDE_DIRS})
target_link_libraries(tests ${OPEN_MESH_CORE_LIBRARY} ${Boost_LIBRARIES} ${YAML_CPP_LIBRARY} ${JSONCPP_LIBRARIES})
При компиляции происходит сбой с известным длиннымсписок проблем, связанных со всеми, заканчивающимися сообщением
undefined reference to boost::log::v2_mt_posix::...
Я не ниндзя cmake, и очень вероятно, что я делаю что-то не так, однако я не могу выяснить, что это такое.
РЕДАКТИРОВАТЬ:
- У меня успешно попытался собрать его на чистой Ubuntu 16.04 с gcc 5 и boost 1.58
- У меня безуспешно пытался собрать его на чистом 18.04 с gcc7.1 и boost 1.65
- У меня безуспешно пытался скомпилировать его на чистом 18.04 с gcc5.5 и само скомпилированный буст 1.58
- У меня безуспешно пытался собрать его на чистом 18.04 с gcc 5.5 и само скомпилированным бустом 1.65
Все попытки последовали заточно такая же процедура.