Docs Menu
Docs Home
/ / /
C++ 드라이버

고급 구성 및 설치 옵션

이 페이지의 내용

  • 통합자를 위한 추가 옵션
  • 패키지 관리자로 설치
  • Vcpkg 설치 지침
  • 코난 설치 지침
  • Homebrew 설치 지침
  • 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_BASENAMEMONGOCXX_OUTPUT_BASENAME 옵션을 cmake 로 설정합니다.

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

위의 명령은 libcustom_bsoncxx.solibcustom_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 을 사용하여 CMake에 개발 파일을 찾을 수 있는 위치를 지시할 수 있습니다.

-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/

패키지 지정자: mongo-cxx-driver/3.8.0

Conan이 아직 설치되어 있지 않은 경우, 설치하고 아래의 Conan 초기화 명령을 실행 합니다.

$ pip install conan
$ conan profile detect --force

conanfile.txt 에 다음을 추가합니다.

[requires]
mongo-cxx-driver/3.8.0
[generators]
CMakeDeps
CMakeToolchain

Conan을 통해 운전자 를 설치하고 프로젝트 를 빌드 합니다.

$ 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

MacOS 사용자는 Homebrew를 사용하여 다음 명령을 실행 하여 C++ 운전자 를 설치할 수 있습니다.

brew install mongo-cxx-driver

헤더는 다음에서 찾을 수 있습니다.

/opt/homebrew/include/mongocxx/v_noabi/
/opt/homebrew/include/bsoncxx/v_noabi/

라이브러리 파일은 다음에서 찾을 수 있습니다.

/opt/homebrew/lib/

헤더는 다음에서 찾을 수 있습니다.

/usr/local/include/mongocxx/v_noabi/
/usr/local/include/bsoncxx/v_noabi/

라이브러리 파일은 다음에서 찾을 수 있습니다.

/usr/local/lib/

mongocxx 운전자 는 MongoDB C 운전자 를 기반으로 빌드됩니다.

mongocxx-3.9.0 의 빌드입니다. C 드라이버가 감지되지 않으면 C 드라이버를 자동으로 다운로드하여 설치합니다. 기존에 설치된 C 드라이버를 사용하려면 CMAKE_PREFIX_PATH 를 C 드라이버 설치가 포함된 디렉토리로 설정합니다.

  • mongocxx-3.11.x의 경우, libmongoc 1.28.0 이상이 필요합니다.

  • mongocxx-3.10.x의 경우, libmongoc 1.25.0 이상이 필요합니다.

  • mongocxx-3.9.x의 경우, libmongoc 1.25.0 이상이 필요합니다.

  • mongocxx-3.8.x의 경우, libmongoc 1.24.0 이상이 필요합니다.

  • mongocxx-3.7.x의 경우, libmongoc 1.22.1 이상이 필요합니다.

  • mongocxx-3.6.x의 경우, libmongoc 1.17.0 이상이 필요합니다.

  • mongocxx-3.5.x의 경우, libmongoc 1.15.0 이상이 필요합니다.

  • mongocxx-3.4.x의 경우, libmongoc 1.13.0 이상이 필요합니다.

  • mongocxx-3.3.x의 경우, libmongoc 1.10.1 이상이 필요합니다.

  • mongocxx-3.2.x의 경우, libmongoc 1.9.2 이상이 필요합니다.

  • mongocxx-3.1.4+의 경우, libmongoc 1.7.0 이상이 필요합니다.

  • mongocxx-3.1.[0-3], libmongoc 1.5.0 이상이 필요합니다.

  • mongocxx-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= 옵션을 지정하는 것도 좋습니다. 이렇게 하면 libmongocxx.so가 libbsoncxx.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

참고

CMake 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를 사용하여 애플리케이션 을 빌드하는 경우 기본 RPATH 설정 은 빌드 트리에서 사용된 모든 라이브러리에 대한 전체 RPATH를 포함합니다. 그러나 설치 시 cmake는 이러한 대상의 RPATH를 지우므로 빈 RPATH로 설치됩니다. 이로 인해 설치 후 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.

실행 파일의 rpath가 설치 대상에 유지되도록 -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"

RPATH 처리 에 대해서는 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를 사용하여 애플리케이션 을 빌드하는 경우 기본 RPATH 설정 은 빌드 트리에서 사용된 모든 라이브러리에 대한 전체 RPATH를 포함합니다. 그러나 설치 시 cmake는 이러한 대상의 RPATH를 지우므로 빈 RPATH로 설치됩니다. 이로 인해 설치 후 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.

실행 파일의 rpath가 설치 대상에 유지되도록 -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"

RPATH 처리 에 대해서는 cmake 설명서를 참조하세요. 을(를) 참조하세요.

돌아가기

C++17 폴리필