高度な構成とインストールのオプション
項目一覧
統合演算子の追加オプション
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
などを指定することで にリンクできます(特定のフラグをリンクカーに必要なものに調整できる場合があります)。
MongoDB C ドライバーのインストール
mongocx ドライバーは、 MongoDB C ドライバー上に構築されます。
mongocx- 3.9.0のビルド C ドライバーが検出されない場合は、 は C ドライバーを自動的にダウンロードし、インストールします C ドライバーの既存のインストールを使用するには、C ドライバーがインストールされたディレクトリにCMAKE_PREFIX_PATH
を設定します。
mongocx- 3.10 .x の場合 libmongoc 1.25.0以降が必要です。
mongocx- 3.9 .x の場合 libmongoc 1.25.0以降が必要です。
mongocx- 3.8 .x の場合 libmongoc 1.24.0以降が必要です。
mongocx- 3.7 .x の場合 libmongoc 1.22.1以降が必要です。
mongocx- 3.6 .x の場合 libmongoc 1.17.0以降が必要です。
mongocx- 3.5 .x の場合 libmongoc 1.15.0以降が必要です。
mongocx- 3.4 .x の場合 libmongoc 1.13.0以降が必要です。
mongocx- 3.3 .x の場合 libmongoc 1.10.1以降が必要です。
mongocx- 3.2 .x の場合 libmongoc 1.9.2以降が必要です。
mongocx- 3.1.4 + の場合、 libmongoc 1.7.0以降が必要です。
mongocx- 3.1 .[ 0 - 3 ] の場合、 libmongoc 1.5.0以降が必要です。
mongocx- 3.0 .x の場合 最後の1.4 .x 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++ ドライバーやその依存関係を、一般的な共有ライブラリではなく静的ライブラリとして構成するための詳細オプションについて詳しく説明します。 これらのオプションを指定すると、動作の異なるライブラリ アーティファクトが生成されます。 これらのオプションを利用する前に、さまざまなリンクに関するアプローチの影響を完全に理解していることを確認してください。
.x 以降で構成するmongocxx
3.2
ユーザーは、 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"
-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
Library not loaded
macOS での エラーの修正
非標準のディレクトリ インストールにリンクしているアプリケーションでは、実行時に 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"
cmake を使用してアプリケーションを構築する場合、 デフォルトの RBATH 設定 ビルド ツリーの使用されているすべてのライブラリへの完全な RBATH を含めます。ただし、インストール時に、cmake はこれらのターゲットの RBATH をクリアするため、空の RBATH を持つ状態でインストールされます。 これにより、インストール後にLibrary not loaded
エラーが発生する可能性があります。
例:
# 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"
cmake を使用してアプリケーションを構築する場合、 デフォルトの RBATH 設定 ビルド ツリーの使用されているすべてのライブラリへの完全な RBATH を含めます。ただし、インストール時に、cmake はこれらのターゲットの RBATH をクリアするため、空の RBATH を持つ状態でインストールされます。 これにより、インストール後にLibrary not loaded
エラーが発生する可能性があります。
例:
# 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 のドキュメントを参照してください。 詳しくは、 を参照してください。