2016-09-15 3 views
1

Я добавил импульс через это:CMake: неопределенная ссылка увеличить библиотеку

set(Boost_USE_STATIC_LIBS  ON) 
set(Boost_USE_MULTITHREADED  ON) 
set(Boost_USE_STATIC_RUNTIME OFF) 
find_package(Boost REQUIRED) 
include_directories(${Boost_INCLUDE_DIR}) 

project(APP C CXX) 
add_executable(APP src.cpp) 
target_link_libraries(APP ${Boost_LIBRARIES}) 

И когда я составил источник, я получил:

demo.cpp:(.text+0x3d3): undefined reference to `boost::system::generic_category()' 

Я проверил орфографию (Boost_LIBRARIES против BOOST_LIBRARIES), но это нормально ,

Я установил boost в Fedora с пакетом boost-devel.

+3

что содержание '$ {Boost_LIBRARIES}'? – Hayt

+0

Это должен быть путь к статическому ускорению lib (https://cmake.org/cmake/help/v3.0/module/FindBoost.html) – Seraph

+2

нет «единого» статического boost lib. И можете ли вы распечатать его, а не то, что «должно быть»? – Hayt

ответ

4

Глядя на source code, Boost_LIBRARIES заполняется в соответствии с перечнем компонентов, переданным в find_package. Попробуйте:

find_package(Boost REQUIRED COMPONENTS system) 

Вы также должны использовать импортированные цели:

set(Boost_USE_STATIC_LIBS  ON) 
set(Boost_USE_MULTITHREADED  ON) 
set(Boost_USE_STATIC_RUNTIME OFF) 
find_package(Boost REQUIRED COMPONENTS system) 

# the call to include_directories is now useless: 
# the Boost::system imported target used below 
# embeds the include directories 

project(APP C CXX) 
add_executable(APP src.cpp) 
target_link_libraries(APP Boost::system) 
+0

cmake не может найти boost_system ... У меня установлена ​​система boost-system, но boost-system-dev не существует – Seraph

+3

только для других: синтаксис ссылки 'Boost :: ' автоматически добавит каталог include в вашу цель. Вот почему 'include_directories' здесь« бесполезен » – Hayt

+0

@Seraph для использования библиотеки вам нужна версия« -dev »при построении – Hayt

Смежные вопросы