CMakeを使用してブーストライブラリを見つけることができません -- c++ フィールド と boost フィールド と cmake フィールド 関連 問題

Cannot find boost libraries with cmake












0
vote

問題

日本語

WindowsにBoost 1.63.0をインストールし、CMakeで構築しようとしています(ジェネレータとしてVisual Studio 2017を使用)。 find_package() を取得するのに問題があり、私の後押しライブラリを見つけて、なぜ理解できません。

cmakelists.txt:

<事前> <コード> find_package(Boost REQUIRED COMPONENTS system filesystem thread)

出力:

<事前> <コード> CMake Error at C:/Program Files (x86)/CMake/share/cmake-3.8/Modules/FindBoost.cm ake:1813 (message): Unable to find the requested Boost libraries. Boost version: 1.63.0 Boost include path: C:/Program Files (x86)/boost/boost_1_63_0 Could not find the following Boost libraries: boost_system boost_filesystem boost_thread Some (but not all) of the required Boost libraries were found. You may need to install these additional Boost libraries. Alternatively, set BOOST_LIBRARYDIR to the directory containing Boost libraries or BOOST_ROOT to the location of Boost.

ブーストはINCLUNLSを見つけますが、ライブラリはありません。ヘッダーは次の場所にあります。 <コード> %BOOST_ROOT% 。ライブラリは %BOOST_ROOT%/stage/lib にあります。 _boost_LIBRARY_SEARCH_DIRS_RELEASE を見ると、外観が最初の場所が正しい場所です。私はまた、確かにそのパスにハードコーディング<コード> BOOST_LIBRARYDIR を試みました。

ブーストをインストールするには、ダウンロードしたアーカイブを %BOOST_ROOT% に抽出し、次に bootstrap および .2 link=static,shared threading=single,multi を実行しました。これにより、ライブラリのすべてのバージョンをお知らせする必要があります。 Boost:Systemの場合は、 find_package(Boost REQUIRED COMPONENTS system filesystem thread) 0

に次のバイナリがあります。 <事前> <コード> find_package(Boost REQUIRED COMPONENTS system filesystem thread) 1

次のことを有効にして無効にしてみましたが、使用しないでください。

<事前> <コード> find_package(Boost REQUIRED COMPONENTS system filesystem thread) 2

これは面白い部分です。 find_package(Boost REQUIRED COMPONENTS system filesystem thread) 3 パラメータはこの行を閉じます。

<事前> <コード> find_package(Boost REQUIRED COMPONENTS system filesystem thread) 4

VC141対VC100に注意してください。私は思います。 b2はVC100のために何かを構築しました。私はそれをVS 2017のためのdevコマンドプロンプトから実行していたのでそれは奇妙なことです。私はwild推測を受け、 find_package(Boost REQUIRED COMPONENTS system filesystem thread) 5 でブーストを作成しようとしましたが、エラーが発生しました: BOOST_LIBRARYDIR616 >

VS2017またはMSVC141でブーストをコンパイルできるようにするにはどうすればよいですか。

このスレッドは関連しているようです: Visual Studio 2017、Boost、Cmake

英語

I've install boost 1.63.0 on Windows and I am trying to build with CMake (using Visual Studio 2017 as a generator). I'm having trouble getting find_package() to find my boost libraries and I can't figure out why.

CMakeLists.txt:

find_package(Boost REQUIRED COMPONENTS system filesystem thread) 

Output:

CMake Error at C:/Program Files (x86)/CMake/share/cmake-3.8/Modules/FindBoost.cm ake:1813 (message):   Unable to find the requested Boost libraries.    Boost version: 1.63.0    Boost include path: C:/Program Files (x86)/boost/boost_1_63_0    Could not find the following Boost libraries:            boost_system           boost_filesystem           boost_thread    Some (but not all) of the required Boost libraries were found.  You may   need to install these additional Boost libraries.  Alternatively, set   BOOST_LIBRARYDIR to the directory containing Boost libraries or BOOST_ROOT   to the location of Boost. 

Boost finds the includes, but not the libraries. Headers are located at: %BOOST_ROOT%. Libraries are located at %BOOST_ROOT%/stage/lib. When I look at _boost_LIBRARY_SEARCH_DIRS_RELEASE, the first place it looks is the correct location. I've also tried hard-coding BOOST_LIBRARYDIR to that path just to be sure.

To install boost I extracted the downloaded archive to %BOOST_ROOT%, then ran bootstrap and .2 link=static,shared threading=single,multi. This should give me all versions of the libraries. In the case of boost:system, I have the following binaries in %BOOST_ROOT%/stage/lib%:

boost_system-vc100-mt-1_63.dll boost_system-vc100-mt-1_63.lib boost_system-vc100-mt-gd-1_63.dll boost_system-vc100-mt-gd-1_63.lib libboost_system-vc100-mt-1_63.lib libboost_system-vc100-mt-gd-1_63.lib 

I've tried enabling and disabling the following, but to no avail:

set( Boost_USE_STATIC_LIBS ON ) set( Boost_USE_MULTITHREADED OFF ) set( Boost_DEBUG ON ) 

Here is an interesting part. The Boost_DEBUG parameter spits out this line:

Searching for SYSTEM_LIBRARY_RELEASE: boost_system-vc141-mt-1_63;boost_system-vc141-mt;boost_system-mt-1_63;boost_system-mt;boost_system 

Note the vc141 versus vc100. I think .2 built something for vc100. That's strange because I was running it from the Dev Command Prompt for VS 2017. I've taken a wild guess and tried to build boost with ./b2 toolset=msvc-14.1 but I get an error: *** argument error * rule maybe-rewrite-setup ( toolset : setup-script : setup-options : version : rewrite-setup ? )".

How can I ensure that I compile boost with VS2017 or MSVC141?

This thread seems related: Version numbers for Visual Studio 2017, Boost and CMake

</div
        
   
   

回答リスト

0
 
vote

使用されている FindBoost.cmake スクリプトを確認してください。使用するCMAKEのバージョンによっては、このバージョンのブーストは処理されない場合があります。ライブラリ間の依存関係は、見つかったブーストのバージョンによって設定されます。

CMakeソースの最新バージョン>>> real="nofollow noreferrer"> github バージョン1.63を処理します。私はそれを処理しないCMAKE v3.6.2に問題がありました。

MSVCのバージョンの不一致についてはわかりません、ごめんなさい。

 

Check the FindBoost.cmake script that is being used. Depending on the version of CMake you use, this version of Boost may not be handled. The dependencies between libraries is set depending on the version of Boost found.

For example the latest version of the script in CMake sources on GitHub handles version 1.63. I had the problem with CMake v3.6.2 which does not handle it.

Regarding the version mismatch for MSVC I don't know, sorry.

</div
 
 
   
   
0
 
vote
vote
ベストアンサー
 

ブーストをコンパイルし、同じツールセットを持つリンクアプリケーションをコンパイルしています。したがって、* -VC100- *から* -VC141 - * までのすべてのコンパイル済みlibsの名前を単にの名前を変更しても安全だと判断しました。通常、私はそれを妨げるでしょうが、この場合、私はそれが同じコンパイラであることを確信しているので、CMakeまたはB2のどちらかがファイルを作成(または検索)したバグを持っていたことは明らかです。間違った名前

その後、CMAKEはブーストしただけでなく、正常にリンクされています。

 

I compiled boost, and am compiling the linking application with the same toolset. Therefore I decided that it was safe to simply rename all compiled libs from *-vc100-* to *-vc141-*. While normally I would discourage that (you could get subtle differences in the ABI), in this case I was certain that it was the same compiler and so it's clear that either cmake or b2 had a bug which created(or searched) a file with the wrong name.

After doing that, cmake not only found boost, but linked successfully.

</div
 
 
 
 

関連する質問

6  QTアプリを自分の静的ライブラリとリンクしようとしたときの未定義の参照  ( Undefined references when trying to link qt app with my static library ) 
私は私がMingWを使って構築した静的ライブラリを持っています、私はQtアプリケーションからそのライブラリにリンクしようとしています。ライブラリ内のオブジェクトファイルの1つによってリンカエラーが発生し続けます。このファイルは実際にはshared_ptrと他方...

2  CMAKE:Visual Studioを使用してWindowsでwinmm imm32バージョンに実行可能ファイルをリンクする方法  ( Cmake how to link executable to winmm imm32 version on windows with visual stu ) 
これらのライブラリを容易に見つけることは可能ですか? ホイールを再発明し、Uber-Long find_library呼び出しを書いたくありません! さらに、「winmm.lib etc」をに配置したいだけです。 <事前> <コード> "Librarian" ...

14  複数のコマンドを持つCTEST  ( Ctest with multiple commands ) 
CTESTを使用していくつかのテストを構築しています。通常、私は単に行でテストを設定することができます: <事前> <コード> ADD_TEST(Test_Name executable args) しかし、私は問題に遭遇しました、私はそれが機能するため...

0  CMAKE関数の並列実行  ( Parallel execution of cmake functions ) 
大規模プロジェクトでCMAKEを実行するときは、特定のCDAKE機能を並列に呼び出すことができますか? 私が心配しているのは、この(ユーザー定義)関数がキャッシュ内に何かを格納するとき、それが並列実行に衝突することです。関数が実際に並行して実行されたときにCm...

6  QT4はCMAKEでコンパイルされません  ( Qt4 wont compile with cmake ) 
C ++用のKdevelopとLinuxの下にあり、QT4アプリケーションをコンパイルしたいのですが、実行すると、次のエラーが発生します。 私は:でコンパイルします <事前> <コード> points_list4 それらはエラーです: <コード> poi...

105  Cmakeを使ってプリコンパイル済みヘッダーを使用します  ( Using pre compiled headers with cmake ) 
私はCMAKEのプリコンパイル済みヘッダーのためのいくつかのサポートをまとめてハッキングすることについての「ネット上の数」の投稿を見ました。彼ら全員が一番上の場所によく見え、誰もがそれをする方法を持っています。現在それをする最善の方法は何ですか? ...

6  CPACKの出力の名前を変更します  ( Rename the output of cpack ) 
CPACK(v2.8.7)がバージョン管理システムからビルド時に取得されたバージョン番号を含むように、インストーラファイルの名前を変更したいと思います。 CPACK_ *変数を設定することはできませんので、「CMAKE」時刻で発生することはできません。 私が...

10  Windows上の非対話型ビルド用のCmakeの使用方法は?  ( How to use cmake for non interactive build on windows ) 
Windows上のCMAKEを使用して自動化されたビルドを設定したいです。私はVisual Studio 2005を使っています。 アップデート:ここで私が使っているものです: 私はdevenv.exeを私のパスに設定します。次にビルドするには、以下のコマ...

13  Solution Configで選択されていないプロジェクトを構築するためのMSBuildを強制する  ( Force msbuild to build a project which is unselected in solution config ) 
コマンドラインでMSBuildを使用して生成されたソリューションファイルを作成します。 <事前> <コード> RelationDetails0 問題は、CMakeによって生成された解決策にデフォルトで構築されていないプロジェクトインストールがあることです。 ...

4  基本的なマルチプラットフォームCMAKE対応プロジェクトの設定中に必要なヘルプ  ( Help needed while setting up basic multiplatform cmake enabled project ) 
tl;質問は下部にあります。 私は新しいことを試していることを試しています - 私の最後の毒はC ++です。私のLinuxのラップトップと他の半分の時間の半分を過ごしているので、私は良いC ++慣行を使用して、基本的なベアボーンプロジェクトを作成する方法...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有