고급 구성 및 설치 옵션
이 페이지의 내용
통합자를 위한 추가 옵션
다른 구성 요소와 함께 임베드할 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
을 사용하여 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
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 드라이버 설치
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++ 운전자 및/또는 해당 종속성을 일반적인 공유 라이브러리가 아닌 정적 라이브러리로 구성하기 위한 고급 옵션에 대해 자세히 설명합니다. 이러한 옵션은 다르게 작동하는 라이브러리 아티팩트를 생성합니다. 이러한 옵션을 사용하기 전에 다양한 연결 접근 방식이 미치는 영향을 완전히 이해하고 있는지 확인하세요.
.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=
옵션을 지정하는 것도 좋습니다. 이렇게 하면 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"
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
문제 해결
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를 사용하여 애플리케이션 을 빌드하는 경우 기본 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 설명서를 참조하세요. 을(를) 참조하세요.
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를 사용하여 애플리케이션 을 빌드하는 경우 기본 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 설명서를 참조하세요. 을(를) 참조하세요.