Docs Menu
Docs Home
/ /

Opciones avanzadas de configuración e instalación

En el caso de que esté compilando la biblioteca BSON C++ y/o el controlador C++ para integrar con otros componentes y desee evitar la posibilidad de colisión con componentes instalados desde una compilación estándar o desde un administrador de paquetes de distribución, puede utilizar el BSONCXX_OUTPUT_BASENAME y MONGOCXX_OUTPUT_BASENAME opciones a cmake.

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

El comando anterior produciría librerías denominadas libcustom_bsoncxx.so y libcustom_mongocxx.so (o con la extensión adecuada para la plataforma de compilación). Esas bibliotecas podrían colocarse en un directorio estándar del sistema o en una ubicación alternativa y podrían vincularse especificando algo como -lcustom_mongocxx -lcustom_bsoncxx en la línea de comandos del enlazador (posiblemente ajustando los flags específicos a los requeridos por tu enlazador).

Puede utilizar los siguientes administradores de paquetes para instalar el controlador C++:

  • vcpkg

  • Conan

  • Homebrew

Si aún no tienes Vcpkg instalado, instálalo con el siguiente comando:

$ git clone https://github.com/Microsoft/vcpkg.git
$ cd vcpkg
$ ./bootstrap-vcpkg.sh

Opcionalmente, para instalar con la integración de Visual Studio:

vcpkg integrate install

Instala el controlador. Es posible que necesites git pull para obtener la última versión.

$ ./vcpkg install mongo-cxx-driver

Puede utilizar el archivo de cadena de herramientas, vcpkg.cmake, para indicar a CMake dónde encontrar los archivos de desarrollo, por ejemplo:

-DCMAKE_TOOLCHAIN_FILE=/<path to vcpkg repo>/vcpkg/scripts/buildsystems/vcpkg.cmake

Puede encontrar los archivos de encabezado en:

vcpkg/installed/<CPU ARCHITECTURE>-<OPERATING SYSTEM>/include/

Los archivos de la biblioteca están en:

vcpkg/installed/<CPU ARCHITECTURE>-<OPERATING SYSTEM>/lib/

Especificador de paquete: mongo-cxx-driver/3.8.0

Si aún no tiene instalado Conan, instálelo y ejecute el siguiente comando de inicialización de Conan:

$ pip install conan
$ conan profile detect --force

Añade lo siguiente a tu conanfile.txt:

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

Instala el controlador a través de Conan y compila tu proyecto:

$ 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

Los usuarios de MacOS pueden utilizar Homebrew para instalar el driver C++ ejecutando el siguiente comando:

brew install mongo-cxx-driver

Los encabezados se pueden encontrar en:

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

Los archivos de la biblioteca se pueden encontrar en:

/opt/homebrew/lib/

Los encabezados se pueden encontrar en:

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

Los archivos de la biblioteca se pueden encontrar en:

/usr/local/lib/

El controlador mongocxx se basa en el controlador MongoDB C.

La compilación de mongocxx-4.1.4 descarga e instala automáticamente el controlador C si no se detecta. Para usar una instalación existente del controlador C, asigne CMAKE_PREFIX_PATH al directorio que contiene la instalación del controlador C. Para obtener información sobre la versión mínima requerida libmongoc de para cada versión del controlador C++, consulte Compatibilidad.

A menos que sepa que su gestor de paquetes ofrece una versión lo suficientemente reciente, deberá descargar y compilar desde el código fuente. Obtenga un archivo comprimido en la página de lanzamiento del controlador C.

Siga las instrucciones para compilar desde un archivo tar en Instalación de libmongoc.

Las mejores prácticas de la industria y algunas normativas exigen el uso de TLS 1.1 o superior. El controlador C de MongoDB admite TLS 1.1 en Linux si OpenSSL es al menos la versión 1.0.1. En macOS y Windows, el controlador C utiliza implementaciones nativas de TLS compatibles con TLS 1.1.

Las siguientes subsecciones detallan opciones avanzadas para configurar el controlador de C++ y/o sus dependencias como bibliotecas estáticas en lugar de las típicas bibliotecas compartidas. Estas opciones generarán artefactos de biblioteca con un comportamiento diferente. Asegúrese de comprender completamente las implicaciones de los distintos métodos de vinculación antes de utilizar estas opciones.

Los usuarios pueden crear mongocxx como una biblioteca estática. No se recomienda para usuarios principiantes. Se puede habilitar este comportamiento con la -DBUILD_SHARED_LIBS opción:

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

Los usuarios pueden crear mongocxx como bibliotecas estáticas y compartidas. Pueden habilitar este comportamiento con la opción -DBUILD_SHARED_AND_STATIC_LIBS:

cmake .. \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_AND_STATIC_LIBS=ON

Los usuarios pueden crear mongocxx como una biblioteca compartida que tiene un enlace estático libmongoc a. Esto no se recomienda para usuarios principiantes. Se puede habilitar este comportamiento con la -DBUILD_SHARED_LIBS_WITH_STATIC_MONGOC opción:

cmake .. \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS_WITH_STATIC_MONGOC=ON

Pase -DENABLE_TESTS=OFF como una opción de cmake para desactivar la configuración de objetivos de prueba.

cmake .. -DENABLE_TESTS=OFF
cmake --build .. --target help
# No test targets are configured.

Para instalar el controlador C++ en un directorio no estándar, especifique CMAKE_INSTALL_PREFIX en la ruta de instalación deseada:

cmake .. \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=$HOME/mongo-cxx-driver

Considere también especificar la opción -DCMAKE_INSTALL_RPATH= en el directorio lib de la instalación. Esto podría permitir que libmongocxx.so localice libbsoncxx.so:

cmake .. \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=$HOME/mongo-cxx-driver \
-DCMAKE_INSTALL_RPATH=$HOME/mongo-cxx-driver/lib

Si el controlador C está instalado en un directorio no estándar, especifique CMAKE_PREFIX_PATH en la ruta de instalación del controlador C:

cmake .. \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_PREFIX_PATH=$HOME/mongo-c-driver \
-DCMAKE_INSTALL_PREFIX=$HOME/mongo-cxx-driver

Nota

Si necesita varias rutas en una variable PATH de CMake, sepárelas con un punto y coma de la siguiente manera: -DCMAKE_PREFIX_PATH="/your/cdriver/prefix;/some/other/path"

En lugar de la opción -DCMAKE_PREFIX_PATH, los usuarios deben especificar el directorio de instalación libmongoc utilizando las opciones -DLIBMONGOC_DIR y -DLIBBSON_DIR:

cmake .. \
-DCMAKE_BUILD_TYPE=Release \
-DLIBMONGOC_DIR=$HOME/mongo-c-driver \
-DLIBBSON_DIR=$HOME/mongo-c-driver \
-DCMAKE_INSTALL_PREFIX=$HOME/mongo-cxx-driver

Las aplicaciones que enlazan a una instalación de directorio no estándar pueden experimentar un error al cargar el controlador de C++ durante la ejecución. Ejemplo:

# 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

El valor predeterminado install name del controlador C++ en macOS incluye @rpath:

otool -D $HOME/mongo-cxx-driver/lib/libmongocxx.dylib
# Prints:
# /Users/kevin.albertson/mongo-cxx-driver/lib/libmongocxx.dylib:
# @rpath/libmongocxx._noabi.dylib

Incluir @rpath en el nombre de instalación permite vincular aplicaciones para controlar la lista de rutas de búsqueda de la biblioteca.

app.out incluye el comando de carga para @rpath/libmongocxx._noabi.dylib. app.out no tiene entradas para sustituir a @rpath.

Hay varias formas de considerar resolver esto en macOS:

Pase DYLD_FALLBACK_LIBRARY_PATH al directorio que contiene las bibliotecas del controlador C++:

DYLD_FALLBACK_LIBRARY_PATH=$HOME/mongo-cxx-driver/lib ./app.out
# Prints "successfully connected with C++ driver"

Alternativamente, se puede pasar la opción del enlazador -Wl,-rpath para agregar entradas que sustituyan a @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"

Si se compila la aplicación con cmake, la configuración predeterminada de RPATH incluye la RPATH completa para todas las bibliotecas utilizadas en el árbol de compilación. Sin embargo, al instalar, cmake borrará la RPATH de estos destinos, por lo que se instalarán con una RPATH vacía. Esto puede generar un Library not loaded error después de la instalación.

Ejemplo:

# 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.

Considere configurar -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=TRUE para que el rpath del ejecutable se mantenga en el destino de instalación.

# 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"

Consulte la documentación de cmake para el manejo de RPATH para obtener más información.

Las aplicaciones que enlazan a una instalación de directorio no estándar pueden experimentar un error al cargar el controlador de C++ durante la ejecución. Ejemplo:

# 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

Hay varias formas de considerar resolver esto en Linux:

Pase LD_LIBRARY_PATH al directorio que contiene las bibliotecas del controlador C++:

LD_LIBRARY_PATH=$HOME/mongo-cxx-driver/lib ./app.out
# Prints "successfully connected with C++ driver"

Alternativamente, se puede pasar la opción del enlazador -Wl,-rpath para agregar rpath entradas:

# 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"

Si se compila la aplicación con cmake, la configuración predeterminada de RPATH incluye la RPATH completa para todas las bibliotecas utilizadas en el árbol de compilación. Sin embargo, al instalar, cmake borrará la RPATH de estos destinos, por lo que se instalarán con una RPATH vacía. Esto puede generar un Library not loaded error después de la instalación.

Ejemplo:

# 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.

Considere configurar -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=TRUE para que el rpath del ejecutable se mantenga en el destino de instalación.

# 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"

Consulte la documentación de cmake para el manejo de RPATH para obtener más información.

Volver

Pools de conexiones