2016-09-15 25 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-develというパッケージでFedoraにboostをインストールしました。

+3

'$ {Boost_LIBRARIES}'の内容は何である:

find_package(Boost REQUIRED COMPONENTS system) 

ます。また、インポートしたターゲットを使用する必要がありますか? – Hayt

+0

静的なboost lib(https://cmake.org/cmake/help/v3.0/module/FindBoost.html) – Seraph

+2

へのパスにする必要があります静的な "1つの" boostのlibはありません。そして、あなたはそれを印刷して、それが "あるべき"ではありませんか? – Hayt

答えて

4

source codeを見ると、に渡されたコンポーネントリストに従ってBoost_LIBRARIESが塗りつぶされています。試してみてください:

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