2016-06-23 22 views
1

私はこの問題を数週間は扱っています。私はおそらく私が気付いていない小さなステップを欠いていることを知っています。だから、どんな洞察も高く評価されるでしょう。CMake経由で外部ライブラリ(例:Eigen)を追加

私はいくつかの外部ライブラリを追加しようとしているし、私のC + +プロジェクトで使用しています。しかし、どのように考え出すことができないようです。私は外部のライブラリを追加することについてインターネット上のすべての記事を読んだが、私は何かが欠けていると思う!

たとえば、Eigen(ヘッダーのみのライブラリ)のような単純なライブラリを追加したいとします。プロジェクトのサブフォルダにあるすべてのファイルを含むフォルダをコピーして貼り付けました。私はThirdPartyLibrariesというサブフォルダを呼び出しました。

INCLUDE_DIRECTORIES("${MAINFOLDER}/ThirdPartyLibraries/eigen") 

何か他に必要なことはありますか?

ここで、XGBoost(ヘッダファイルとソースファイルの両方を持つ)のような別のライブラリを追加したいとしましょう。どのように違うでしょうか?

私はXGBoostで同様のことをしました。私のコードはエラーなしでビルドすることができますが、ライブラリの関数を参照していない限り(基本的にライブラリをプロジェクトを使用せずにライブラリに追加するだけです)。いずれかの関数を使用しようとすると、「未解決の外部シンボル」に関するエラーが表示され、ライブラリを追加する際に何か不足していると思われます。

私のC++コードにライブラリを追加していません。あなたが説明を単純にしておくことができれば、それは素晴らしいことでしょう!

+1

'ライブラリの追加中に何か不足していると思われる「未解決の外部シンボル」に関するエラーが表示されます。」 - [target_link_libraries](https://cmake.org/cmake/help/) v3.0/command/target_link_libraries.html)。 – Tsyvarev

+0

ありがとうございます。それは理にかなっている。私は目標とする必要があるファイルは何ですか? .osまたは.dllファイルが見つかりません。 –

+0

'.osまたは.dllファイルが見つかりません。 ' - それで、ライブラリをビルドする必要があります。 – Tsyvarev

答えて

2

私はこの問題を解決し、この問題に遭遇する可能性がある他の誰かのために解決策を共有していると思いました。

追加するEigenライブラリは、それがヘッダファイルだけであるため、かなり簡単です。すべてのヘッダファイルをコピーしてプロジェクトのディレクトリのどこかに貼り付け、インクルードディレクトリを使用するだけです。あなたは大丈夫です。

XGBoostのリンクに関して、彼らはそのプロジェクトのcmakeファイルを追加しました。ですから、Visual Studioでそのプロジェクトをビルドするだけです。ビルド後、.lib、.dll、および.exeファイルが取得されます。 .libファイルだけが必要です。コピーして、プロジェクトのディレクトリのどこかに貼り付けると、このようなメインプロジェクトにリンク:次に

TARGET_LINK_LIBRARIES(ProjectName libxgboost) 

、あなたはどこかにxgboostディレクトリから(ヘッダファイルを含む)が含まディレクトリを対処して貼り付ける必要がありあなたのプロジェクトディレクトリ。 libxgboostのほかに、rabitとxgboostライブラリも含める必要があります。ですから、libxgboost.libをコピー&ペーストするときにそれらをコピー&ペーストし、 'target_link_directories'を使用してそれらをリンクしてください。

ライブラリのいずれかの関数を使用する場合は、必ずヘッダーファイルをインクルードしてください。

これは、仕事に苦労している人に役立ちます。

+0

私はLinux上でxgboostを使いたいです。 Visual Studioのない方法はありますか?ライブラリをインストールして使用するには? –

+0

Linuxのマニュアルを参照してください。私はWindows上で作業しているので、Linuxの設定をチェックしませんでした。しかし、Linuxは実際にはもっと簡単かもしれません。 –

+0

申し訳ありません。私が意味していたことは、「Windows上でxgboostを使用したい」 –

関連する問題