統合演算子の追加オプション
BSON C++ ライブラリや C++ ドライバーを作成して他のコンポーネントに埋め込み、標準ビルドまたはディストリビューション パッケージ マネージャーからインストールされたコンポーネントとの競合の可能性を避けたい場合は、次を使用できます: BSONCXX_OUTPUT_BASENAMEとMONGOCXX_OUTPUT_BASENAMEオプションをcmakeへ
cmake .. \ -DBSONCXX_OUTPUT_BASENAME=custom_bsoncxx \ -DMONGOCXX_OUTPUT_BASENAME=custom_mongocxx
上記のコマンドでは、 libcustom_bsoncxx.soとlibcustom_mongocxx.soという名前のライブラリ(またはビルド プラットフォームに適した拡張機能)が生成されます。 これらのライブラリは標準のシステム ディレクトリまたは代替の場所に配置でき、リンクのコマンドラインで-lcustom_mongocxx -lcustom_bsoncxxなどを指定することで にリンクできます(特定のフラグをリンクカーに必要なものに調整できる場合があります)。
パッケージ マネージャーを使用したインストール
C++ドライバーをインストールするには、次のパッケージマネージャーを使用できます。
Vcpkg インストール手順
Vcpkg がまだインストールされていない場合は、次のコマンドを使用してインストールします。
$ git clone https://github.com/Microsoft/vcpkg.git $ cd vcpkg $ ./bootstrap-vcpkg.sh
オプションで、Visual Studio 統合を使用して をインストールするには、次の手順に従います。
vcpkg integrate install
ドライバーをインストールします。 最新バージョンのドライバーを取得するには、 git pullが必要になる場合があります。
$ ./vcpkg install mongo-cxx-driver
ツールチェーン ファイルvcpkg.cmakeを使用して、CSpec に開発ファイルを見つける場所をたとえば次のように指示できます。
-DCMAKE_TOOLCHAIN_FILE=/<path to vcpkg repo>/vcpkg/scripts/buildsystems/vcpkg.cmake
ヘッダー ファイルは次の場所にあります。
vcpkg/installed/<CPU ARCHITECTURE>-<OPERATING SYSTEM>/include/
ライブラリのファイルは次の場所にあります。
vcpkg/installed/<CPU ARCHITECTURE>-<OPERATING SYSTEM>/lib/
Console をインストールする手順
パッケージ指定子: mongo-cxx-driver/3.8.0
接続をまだインストールしていない場合は、インストールして接続コマンドを実行します。
$ pip install conan $ conan profile detect --force
以下をconanfile.txtに追加します。
[requires] mongo-cxx-driver/3.8.0 [generators] CMakeDeps CMakeToolchain
Console 経由でドライバーをインストールし、プロジェクトをビルドします。
$ conan install conanfile.txt --output-folder=build --build=missing $ cmake \ -B build \ -DCMAKE_TOOLCHAIN_FILE=conan_toolchain.cmake \ -DCMAKE_BUILD_TYPE=Release $ cmake --build build
Homebrew のインストール手順
MacOS ユーザーは Homebrew を使用して、次のコマンドを実行中してC++ドライバーをインストールできます。
brew install mongo-cxx-driver
Apple Silicon Mac の場合
ヘッダーは次の場所にあります。
/opt/homebrew/include/mongocxx/v_noabi/ /opt/homebrew/include/bsoncxx/v_noabi/
ライブラリ ファイルは次の場所にあります。
/opt/homebrew/lib/
Intel Mac の場合
ヘッダーは次の場所にあります。
/usr/local/include/mongocxx/v_noabi/ /usr/local/include/bsoncxx/v_noabi/
ライブラリ ファイルは次の場所にあります。
/usr/local/lib/
MongoDB Cドライバーをインストール
mongocx ドライバーはMongoDB C ドライバー上に構築されます。
mongocxx-3.9.0 のビルドするCドライバーが検出されない場合は、Cドライバーを自動的にダウンロードし、インストールしますCドライバーの既存のインストールを使用するには、Cドライバーがインストールされたディレクトリに CMAKE_PREFIX_PATH を設定します。C++ドライバーの各バージョンに最小限必要な libmongoc バージョンについて詳しくは、互換性 を参照してください。
パッケージマネージャーが十分に最新のバージョンを提供していることがわかっていない限り、ソースコードをダウンロードしてビルドする 必要があります。Cドライバー リリース ページから tarball を取得します。
libmongoc のインストール で、tarball からビルドする手順に従ってください。
業界のベストプラクティスと一部の規制では、TLS 1.1以上の使用が必要です。 MongoDB C ドライバーは、OpenSSL が少なくともバージョン1.0.1の場合、Linux で TLS 1.1をサポートします。 macOS および Windows では、C ドライバーは TLS 1.1をサポートするネイティブ TLS 実装を使用します。
高度な構成(静的構成)
次のサブセクションでは、C++ ドライバーやその依存関係を、一般的な共有ライブラリではなく静的ライブラリとして構成するための詳細オプションについて詳しく説明します。 これらのオプションを指定すると、動作の異なるライブラリ アーティファクトが生成されます。 これらのオプションを利用する前に、さまざまなリンクに関するアプローチの影響を完全に理解していることを確認してください。
mongocxx 3.2.x 以降で構成する
ユーザーは、 mongocxxを静的ライブラリとして構築するオプションがあります。 これは初めてユーザーには推奨されません。 ユーザーは-DBUILD_SHARED_LIBSオプションを使用してこの動作を有効にできます。
cmake .. \ -DCMAKE_BUILD_TYPE=Release \ -DBUILD_SHARED_LIBS=OFF
mongocxx 3.5.0 以降で構成する
ユーザーは、 mongocxxを静的ライブラリと共有ライブラリの両方として構築するオプションがあります。 ユーザーは-DBUILD_SHARED_AND_STATIC_LIBSオプションを使用してこの動作を有効にできます。
cmake .. \ -DCMAKE_BUILD_TYPE=Release \ -DBUILD_SHARED_AND_STATIC_LIBS=ON
ユーザーは、静的にリンクされたlibmongocを持つ共有ライブラリとしてmongocxxを構築するオプションがあります。 これは初めてユーザーには推奨されません。 ユーザーは-DBUILD_SHARED_LIBS_WITH_STATIC_MONGOCオプションを使用してこの動作を有効にできます。
cmake .. \ -DCMAKE_BUILD_TYPE=Release \ -DBUILD_SHARED_LIBS_WITH_STATIC_MONGOC=ON
テストを無効にする
テスト ターゲットの構成を無効にするには、cmake オプションとして-DENABLE_TESTS=OFFを渡します。
cmake .. -DENABLE_TESTS=OFF cmake --build .. --target help # No test targets are configured.
非標準のディレクトリへのインストール
C++ ドライバーを非標準のディレクトリにインストールするには、目的のインストール パスにCMAKE_INSTALL_PREFIXを指定します。
cmake .. \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=$HOME/mongo-cxx-driver
インストールのlibディレクトリに-DCMAKE_INSTALL_RPATH=オプションを指定することも検討してください。 これにより、libmongocx.son が libbsoncx.so を見つけられるようになります。
cmake .. \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=$HOME/mongo-cxx-driver \ -DCMAKE_INSTALL_RPATH=$HOME/mongo-cxx-driver/lib
C ドライバーが非標準のディレクトリにインストールされている場合は、C ドライバーのインストール パスにCMAKE_PREFIX_PATHを指定します。
cmake .. \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_PREFIX_PATH=$HOME/mongo-c-driver \ -DCMAKE_INSTALL_PREFIX=$HOME/mongo-cxx-driver
注意
CMax PATH 変数に複数のパスが必要な場合は、次のようにセミコロンで区切ります。 -DCMAKE_PREFIX_PATH="/your/cdriver/prefix;/some/other/path"
mongocxx 3.1.x または 3.0.x で構成する
-DCMAKE_PREFIX_PATHオプションの代わりに、 -DLIBMONGOC_DIRと-DLIBBSON_DIRオプションを使用してlibmongocインストール ディレクトリを指定する必要があります。
cmake .. \ -DCMAKE_BUILD_TYPE=Release \ -DLIBMONGOC_DIR=$HOME/mongo-c-driver \ -DLIBBSON_DIR=$HOME/mongo-c-driver \ -DCMAKE_INSTALL_PREFIX=$HOME/mongo-cxx-driver
トラブルシューティング
macOS での Library not loaded エラーの修正
非標準のディレクトリ インストールにリンクしているアプリケーションでは、実行時に C++ ドライバーをロードする際にエラーが発生する可能性があります。 例:
# Tell pkg-config where to find C++ driver installation. export PKG_CONFIG_PATH=$HOME/mongo-cxx-driver/lib/pkgconfig clang++ app.cpp -std=c++11 $(pkg-config --cflags --libs libmongocxx) -o ./app.out ./app.out # Prints the following error: # dyld[3217]: Library not loaded: '@rpath/libmongocxx._noabi.dylib' # Referenced from: '/Users/kevin.albertson/code/app.out' # Reason: tried: '/usr/local/lib/libmongocxx._noabi.dylib' (no such file), '/usr/lib/libmongocxx._noabi.dylib' (no such file) # zsh: abort ./app.out
macOS 上の C++ ドライバーのデフォルトのinstall nameには@rpathが含まれます。
otool -D $HOME/mongo-cxx-driver/lib/libmongocxx.dylib # Prints: # /Users/kevin.albertson/mongo-cxx-driver/lib/libmongocxx.dylib: # @rpath/libmongocxx._noabi.dylib
インストール名に@rpathを含めると、リンク中のアプリケーションがライブラリの検索パスのリストを制御できるようになります。
app.out には、 @rpath/libmongocxx._noabi.dylibの ロード コマンドが含まれています。 app.outには@rpathを置き換えるエントリがありません。
macOS でこれを解決するために、次の方法が検討されています。
C++ ドライバー ライブラリを含むディレクトリにDYLD_FALLBACK_LIBRARY_PATHを渡します。
DYLD_FALLBACK_LIBRARY_PATH=$HOME/mongo-cxx-driver/lib ./app.out # Prints "successfully connected with C++ driver"
あるいは、リンク オプション-Wl,-rpathを渡して、 @rpathを置き換えるエントリを追加することもできます。
# Tell pkg-config where to find C++ driver installation. export PKG_CONFIG_PATH=$HOME/mongo-cxx-driver/lib/pkgconfig # Pass the linker option -rpath to set an rpath in the final executable. clang++ app.cpp -std=c++11 -Wl,-rpath,$HOME/mongo-cxx-driver/lib $(pkg-config --cflags --libs libmongocxx) -o ./app.out ./app.out # Prints "successfully connected with C++ driver"
If building the application with cmake, the Default RPATH settings include the full RPATH to all used libraries in the build tree. However, when installing, cmake will clear the RPATH of these targets so they are installed with an empty RPATH. This may result in a Library not loaded error after install.
例:
# Build application ``app`` using the C++ driver from a non-standard install. cmake \ -DCMAKE_PREFIX_PATH=$HOME/mongo-cxx-driver \ -DCMAKE_INSTALL_PREFIX=$HOME/app \ -DCMAKE_CXX_STANDARD=11 \ -Bcmake-build -S. cmake --build cmake-build --target app.out # Running app.out from build tree includes rpath to C++ driver. ./cmake-build ./cmake-build/app.out # Prints: "successfully connected with C++ driver" cmake --build cmake-build --target install # Running app.out from install tree does not include rpath to C++ driver. $HOME/app/bin/app.out # Prints "Library not loaded" error.
実行可能ファイルの R パスがインストール ターゲットに保持されるように、 -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=TRUEを設定することを検討してください。
# Build application ``app`` using the C++ driver from a non-standard install. # Use CMAKE_INSTALL_RPATH_USE_LINK_PATH=TRUE to keep rpath entry on installed app. cmake \ -DCMAKE_PREFIX_PATH=$HOME/mongo-cxx-driver \ -DCMAKE_INSTALL_PREFIX=$HOME/app \ -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=TRUE \ -DCMAKE_CXX_STANDARD=11 \ -Bcmake-build -S. cmake --build cmake-build --target install $HOME/app/bin/app.out # Prints "successfully connected with C++ driver"
詳細については、RBATH 処理 に関するcmake のドキュメントを参照してください。
Linuxでの「共有オブジェクトファイルを開くことができません」エラーの修正
非標準のディレクトリ インストールにリンクしているアプリケーションでは、実行時に C++ ドライバーをロードする際にエラーが発生する可能性があります。 例:
# Tell pkg-config where to find C++ driver installation. export PKG_CONFIG_PATH=$HOME/mongo-cxx-driver/lib/pkgconfig g++ -std=c++11 app.cpp $(pkg-config --cflags --libs libmongocxx) -o ./app.out ./app.out # Prints the following error: # ./app.out: error while loading shared libraries: libmongocxx.so._noabi: cannot open shared object file: No such file or directory
Linux でこれを解決する方法がいくつかあります。
C++ ドライバー ライブラリを含むディレクトリにLD_LIBRARY_PATHを渡します。
LD_LIBRARY_PATH=$HOME/mongo-cxx-driver/lib ./app.out # Prints "successfully connected with C++ driver"
あるいは、リンク オプション-Wl,-rpathを渡してrpathエントリを追加することもできます。
# Tell pkg-config where to find C++ driver installation. export PKG_CONFIG_PATH=$HOME/mongo-cxx-driver/lib/pkgconfig # Pass the linker option -rpath to set an rpath in the final executable. g++ app.cpp -std=c++11 -Wl,-rpath,$HOME/mongo-cxx-driver/lib $(pkg-config --cflags --libs libmongocxx) -o ./app.out ./app.out # Prints "successfully connected with C++ driver"
If building the application with cmake, the Default RPATH settings include the full RPATH to all used libraries in the build tree. However, when installing, cmake will clear the RPATH of these targets so they are installed with an empty RPATH. This may result in a Library not loaded error after install.
例:
# Build application ``app`` using the C++ driver from a non-standard install. cmake \ -DCMAKE_PREFIX_PATH=$HOME/mongo-cxx-driver \ -DCMAKE_INSTALL_PREFIX=$HOME/app \ -DCMAKE_CXX_STANDARD=11 \ -Bcmake-build -S. cmake --build cmake-build --target app.out # Running app.out from build tree includes rpath to C++ driver. ./cmake-build ./cmake-build/app.out # Prints: "successfully connected with C++ driver" cmake --build cmake-build --target install # Running app.out from install tree does not include rpath to C++ driver. $HOME/app/bin/app.out # Prints "cannot open shared object file" error.
実行可能ファイルの R パスがインストール ターゲットに保持されるように、 -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=TRUEを設定することを検討してください。
# Build application ``app`` using the C++ driver from a non-standard install. # Use CMAKE_INSTALL_RPATH_USE_LINK_PATH=TRUE to keep rpath entry on installed app. cmake \ -DCMAKE_PREFIX_PATH=$HOME/mongo-cxx-driver \ -DCMAKE_INSTALL_PREFIX=$HOME/app \ -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=TRUE \ -DCMAKE_CXX_STANDARD=11 \ -Bcmake-build -S. cmake --build cmake-build --target install $HOME/app/bin/app.out # Prints "successfully connected with C++ driver"
詳細については、RBATH 処理 に関するcmake のドキュメントを参照してください。