4

最新の MongoDB C++ ドライバーhttp://downloads.mongodb.org/cxx-driver/mongodb-linux-x86_64-2.5.2.tgzをダウンロードしました。「scons」を実行すると、問題なくビルドされます。建物が完成すると、次のものが得られます。

ranlib build/libmongoclient.a
Install file: "build/libmongoclient.a" as "libmongoclient.a"
scons: done building targets.

mongo をインストールすると書かれていますが、lib とヘッダーを /usr/local などの適切な場所にインストールしたいと思います。何を試しても (scons install、--prefix の有無にかかわらず)、/usr/local にインストールしたくないだけです。実際、インストール ターゲットは最新であると表示されます。

$sudo scons install --prefix=/usr/local
scons: Reading SConscript files ...
Checking for C++ library boost_thread-mt... (cached) yes
Checking for C++ library boost_filesystem-mt... (cached) yes
Checking for C++ library boost_system-mt... (cached) yes
Checking for sasl_version_info(0, 0, 0, 0, 0, 0) in C library sasl2... (cached) yes
Checking for C++ header file execinfo.h... (cached) yes
Checking whether backtrace is declared... (cached) yes
Checking whether backtrace_symbols is declared... (cached) yes
Checking whether backtrace_symbols_fd is declared... (cached) yes
scons: done reading SConscript files.
scons: Building targets ...
scons: `install' is up to date.
scons: done building targets.

他のパラメーターを使用してインストールする必要がありますか? ライブラリについては、コピーするだけで済みますが、ヘッダーを手動でインストールするのは面倒です。

4

3 に答える 3

6

現在、MongoDB C++ ドライバーをインストールする最善の方法は、公式のgithub リポジトリに移動し、 「ダウンロードしてコンパイルする」wiki ページを読むことです。

リポジトリには 3 つのブランチがあります (現在 2 つは安定したリリース ストリームを提供しています)。最初の安定版リリース シリーズは26compat (MongoDB 2.6 互換) という名前で、MongoDB の 2.6 リリースから抽出されたソース コードが含まれています (独立させるためのマイナーな変更が加えられています)。これは、C++ ドライバーを中心に構築された既存のコードのドロップイン置換として意図されています。

他の安定版リリース シリーズはlegacyと呼ばれ、26compat ブランチに似ていますが、いくつかの後方破壊的な改善と多くの重要な改善と修正が含まれています。これは、新しいプロジェクトの正しい出発点です。古い「サーバー ドライバー」または 26compat ドライバーを使用している既存のプロジェクトも、安定したレガシー リリース シリーズへのアップグレードを目指す必要があります。

興味がある場合は、ここで変更の詳細を読むことができますが、一般的には、現在 github リポジトリで提供されているものを使用する方がよいでしょう。C++ ドライバーは以前はサーバー ソース経由で技術的に利用可能でしたが、実際には MongoDB の外部で使用することを意図したものではありませんでした。現在、公式リポジトリで提供しているコードは、外部で使用すること意図しており、C++ ドライバー チームによってサポートされています。

また、マスター ブランチで C++11 用にビルドされたまったく新しいドライバーの開発にも取り組んでいますが、これはまだ本番環境に対応していません。試してみて、フィードバックを提供することをお勧めします。

于 2014-06-15T22:58:27.047 に答える
3

編集: この投稿には多くのトラフィックが寄せられますが、現在は公式に古くなっている「レガシー C++」ドライバーのビルド方法について説明しています。レガシー C++ ドライバーは、新しい C++11 ドライバーによって廃止されました。MongoDB と通信するクライアント アプリケーションを C++ で作成する場合は、新しい C++11 ドライバーを最初に選択する必要があります。新しい C++11 ドライバーのビルド方法に関する情報は、次の場所で入手できます。

https://github.com/mongodb/mongo-cxx-driver/wiki/Quickstart-Guide-(新しいドライバー)

編集:この回答は廃止されていることに注意してください。以下の Tyler の回答は、C++ ドライバーの最新のすべてのユーザーにとって正しい回答です。

2.5 リリース (または 2.4 リリース) の C++ ドライバー tarball を使用してドライバー ライブラリをビルドすることはお勧めしません。

C++ ドライバーをビルドする最善の方法は、完全な mongodb ソース アーカイブから入手することです。これにはいくつかの理由がありますが、最も重要なのは、tarball ビルドが非常に最小限のビルド システムしか提供しないことです。お気づきのとおり、「インストール」ターゲットはありません。別の制限として、tarball ビルドは共有オブジェクトを生成できませんが、完全なソースは生成できます。

主要な mongodb ソースから C++ ドライバーをビルドするための基本的な手順を次に示します。

  • https://github.com/mongodb/mongoから mongodb ソースを複製します。
  • 走るscons --prefix=<path-to-install> --full --use-system-all install-mongoclient
  • 共有ライブラリ (最新の 2.4 および最新の 2.5 でサポートされている) が必要な場合は、--sharedclient上記の行に追加します。
  • ライブラリのデバッグ ビルドが必要な場合は、--dd(2.4) または--dbg=on(トランクの 2.5 チップ) を渡します。

この--use-system-allフラグは非常に重要です。フラグを使用すると、主要な mongodb ソースに付属する boost や pcre などのベンダーのバージョンに対するビルドが禁止されます。これらのライブラリに対してライブラリをビルドする必要はありません。結果として得られるライブラリは、これらのライブラリのシステム バージョンに対してビルドされたアプリケーションと混合するのに適していないからです。これは、 でビルドする場合に特に重要--sharedclientです。

上記の問題の 1 つは、 でビルドする場合--use-system-all、ビルド システムがシステム上にさまざまなライブラリが存在するかどうかをチェックすることです。これらのライブラリの一部 (v8 など) は利用できない場合があります。2.4 では、適切なバージョンのライブラリをインストールするか、ライブラリを探す CheckLib 呼び出しを禁止するように SConstruct を編集する必要があります。2.5 では、見つからないライブラリに依存するターゲットをビルドしようとすると、見つからないライブラリが原因でビルドが失敗するだけなので、これは問題ではありません。C++ クライアント ドライバーのビルドは少数のライブラリ (boost など) のみに依存するため、作業がはるかに簡単になります。

--prefixまた、インストール アクションが意図したとおりであることを確認するために、最初にテスト引数を使用してビルドすることをお勧めします。

お役に立てれば。

于 2013-09-19T19:34:23.640 に答える
0

残念ながら、ライブラリは自動的にインストールされません。アプリケーションと共にライブラリを配布できるようにコンパイルされています。cpp を含めたり、tarball ファイルを使用したりすることはお勧めしません。

このリンクのドキュメントを参照してください: http://docs.mongodb.org/ecosystem/tutorial/download-and-compile-cpp-driver/#download-and-compile-cpp-driver

ベスト、チャーリー

于 2013-09-17T19:41:55.253 に答える