Docs Menu
Docs Home
/ / /
C++ ドライバー
/

高度な構成とインストールのオプション

項目一覧

  • 統合演算子の追加オプション
  • MongoDB C ドライバーのインストール
  • 高度な構成(静的構成)
  • mongocxx 3.2 .x 以降で構成する
  • mongocxx 3.5.0以降で構成する
  • テストを無効にする
  • 非標準のディレクトリへのインストール
  • mongocxx 3.1 .x または3.0 .x で構成
  • macOS でのLibrary not loadedエラーの修正
  • Linux での「共有オブジェクトファイルを開くことができません」エラーの修正

BSON C++ ライブラリや C++ ドライバーを作成して他のコンポーネントに埋め込み、標準ビルドまたはディストリビューション パッケージ マネージャーからインストールされたコンポーネントとの競合の可能性を避けたい場合は、次を使用できます: BSONCXX_OUTPUT_BASENAMEおよびMONGOCXX_OUTPUT_BASENAMEオプションをcmakeに適用します。

cmake .. \
-DBSONCXX_OUTPUT_BASENAME=custom_bsoncxx \
-DMONGOCXX_OUTPUT_BASENAME=custom_mongocxx

上記のコマンドでは、 libcustom_bsoncxx.solibcustom_mongocxx.soという名前のライブラリ(またはビルド プラットフォームに適した拡張機能)が生成されます。 これらのライブラリは標準のシステム ディレクトリまたは代替の場所に配置でき、リンクのコマンドラインで-lcustom_mongocxx -lcustom_bsoncxxなどを指定することで にリンクできます(特定のフラグをリンクカーに必要なものに調整できる場合があります)。

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++ ドライバーやその依存関係を、一般的な共有ライブラリではなく静的ライブラリとして構成するための詳細オプションについて詳しく説明します。 これらのオプションを指定すると、動作の異なるライブラリ アーティファクトが生成されます。 これらのオプションを利用する前に、さまざまなリンクに関するアプローチの影響を完全に理解していることを確認してください。

ユーザーは、 mongocxxを静的ライブラリとして構築するオプションがあります。 これは初めてユーザーには推奨されません。 ユーザーは-DBUILD_SHARED_LIBSオプションを使用してこの動作を有効にできます。

cmake .. \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=OFF

ユーザーは、 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

非標準のディレクトリ インストールにリンクしているアプリケーションでは、実行時に 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 のドキュメントを参照してください。 詳しくは、 を参照してください。

非標準のディレクトリ インストールにリンクしているアプリケーションでは、実行時に 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 のドキュメントを参照してください。 詳しくは、 を参照してください。

戻る

Linux へのインストール