2016-05-01 16 views
-1

私はWindows CMakeプロジェクトのboost_systemライブラリにリンクしようとしていますが、次のエラーが発生し続けます。私は同様の質問についていくつかの提案された解決策を試しましたが、何も動かないようです。ブーストライブラリとのCMakeリンク

Error:Unable to find the requested Boost libraries. 
Boost version: 1.60.0 
Boost include path: C:/Program Files/boost_1_60_0 
Could not find the following Boost libraries: 
    boost_system 
No Boost libraries were found. You may need to set BOOST_LIBRARYDIR to the 
directory containing Boost libraries or BOOST_ROOT to the location of Boost. 

これは私のcmakeのファイル(後押しする関連)の現在の状態です

set(Boost_USE_STATIC_LIBS OFF) 
set(Boost_USE_MULTITHREADED ON) 
set(Boost_USE_STATIC_RUNTIME OFF) 

SET(BOOST_INCLUDEDIRS "C:/Program Files/boost_1_60_0") 
SET(BOOST_LIBRARYDIR "C:/Program Files/boost_1_60_0/lib") 

find_package(Boost 1.60.0 COMPONENTS system REQUIRED) 

if(Boost_FOUND) 
    include_directories(${Boost_INCLUDE_DIRS}) 
LINK_DIRECTORIES(${Boost_LIBRARY_DIRS}) 
endif() 
+0

どのコンパイラを使用していますか? –

+3

'BOOST_ROOT'だけを設定しようとしましたか? – arrowd

+0

@ J-Mik私はMinGWをコンパイラとして使用しています。 –

答えて

1

は、ここで私は移植性にそれを使用する方法ですが、あなたはあなたが必要とするコンポーネントを指定する必要があります。まず

ライブラリを構築する必要があります。この中で窓やタイプで、コマンドプロンプトを開きます(あなたはMinGWのインストールフォルダの/ binに/フォルダを指定し、それに応じ最初の行を変更する必要があります)

PATH=C:\MinGW\bin;%PATH% 
cd C:/Program Files/boost_1_60_0/ 
bootstrap.bat 
b2 --toolset=gcc link=static --build-type=complete 

にそれをコンパイルするのに数分を取る必要があります。 は、その後、あなたのCMakeLists.txtに追加します。

if (WIN32) 
    set(BOOST_ROOT C:/Program Files/boost_1_60_0/) 
    set(Boost_USE_STATIC_LIBS OFF) 
    set(Boost_USE_MULTITHREADED ON) 
    set(Boost_USE_STATIC_RUNTIME OFF) 

    include_directories(${BOOST_ROOT}) 
    link_directories(${BOOST_ROOT}/stage/lib) # add this before add_executable() 
endif() 

# Here add your add_executable function 
add_executable(your_exec ${SOURCE_FILES} ${INCLUDE_FILES}) 

if(NOT MSVC) 
    find_package(Boost REQUIRED COMPONENTS date_time filesystem wserialization system serialization thread regex) 

    if (Boost_FOUND) 
     include_directories(${Boost_INCLUDE_DIRS}) 
     target_link_libraries(your_exec ${Boost_LIBRARIES}) 
    endif() 
endif() 
+0

ありがとうございますが、動作しませんでした:S同じエラー –

+1

@ Gabriel-Asmanは、まずライブラリをビルドしましたか?私はMinGWでそれを構築するために私の答えを更新しました。 –

+0

これで、まだ動作しません。変更したものは何もdiffernce..sameエラーになりません。 –

0

あなたは間違った変数名を使用しています。それは

SET(BOOST_INCLUDEDIR "C:/Program Files/boost_1_60_0") 

マインド不足している複数の-Sでなければなりません。 がちなみにまたhttps://cmake.org/cmake/help/v3.5/module/FindBoost.html

を参照してください、あなたはそのように設定されますが、CMAKE_PREFIX_PATHC:/Program Files/boost_1_60_0を追加し、cmakeのコールにそれを渡すべきではありません。

+0

これはスクリプトの_出力変数です。これらを手動で設定する場合は、findスクリプトをまったく呼び出す必要はありません。 findスクリプトへの入力パラメータとしてヒントを与えるには、 'BOOST_ROOT'、' BOOST_INCLUDEDIR'、 'BOOST_LIBRARYDIR'を使用しなければなりません。 – ComicSansMS

+0

@ComicSansMS:あなたが正しいです、私は質問のタイプによって混乱しました。それでも、私はそれがタイプミスだと思う。ヒントをありがとう。 – usr1234567

関連する問題