Menu Docs
Página inicial do Docs
/ / /
Driver C++

Opções avançadas de configuração e instalação

Nesta página

  • Opções adicionais para integradores
  • Instalar com gerenciadores de pacotes
  • Instruções de instalação do Vpkg
  • Instruções de instalação do Conan
  • Instruções de instalação do Homebrew
  • Instale o driver MongoDB C
  • Configuração avançada (configurações estáticas)
  • Configurando com mongocxx 3.2.x ou mais recente
  • Configurando com mongocxx 3.5.0 ou mais recente
  • Desabilitando testes
  • Instalando em diretórios não padrão
  • Configurando com mongocxx 3.1.x ou 3.0.x
  • Solução de problemas
  • Corrigindo o erro Library not loaded no macOS
  • Corrigindo o erro "não é possível abrir o arquivo de objeto compartilhado" no Linux

Caso você esteja construindo a biblioteca BSON C++ e/ou o driver C++ para incorporar com outros componentes e deseja evitar o potencial de colisão com componentes instalados a partir de uma compilação padrão ou de um gerenciador de pacotes de distribuição, você pode usar as opções BSONCXX_OUTPUT_BASENAME e MONGOCXX_OUTPUT_BASENAME para cmake.

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

O comando acima produziria bibliotecas denominadas libcustom_bsoncxx.so e libcustom_mongocxx.so (ou com a extensão apropriada para a plataforma de construção). Essas bibliotecas podem ser colocadas em um diretório do sistema padrão ou em um local alternativo e podem ser vinculadas especificando algo como -lcustom_mongocxx -lcustom_bsoncxx na linha de comando do vinculador (possivelmente ajustando os sinalizadores específicos aos exigidos pelo vinculador).

Você pode usar os seguintes gerenciadores de pacote para instalar o driver C++ :

  • vspkg

  • Conan

  • Homebrew

Se você ainda não tiver o Vocêpkg instalado, instale-o com o seguinte comando:

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

Opcionalmente, para instalar com integração do Visual Studio:

vcpkg integrate install

Instale o driver. Talvez seja necessário git pull para obter a versão mais recente do driver.

$ ./vcpkg install mongo-cxx-driver

Você pode usar o arquivo de cadeia de ferramentas, vcpkg.cmake, para instruir o CMake onde encontrar os arquivos de desenvolvimento, por exemplo:

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

Você pode encontrar os arquivos de cabeçalho em:

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

Os arquivos da biblioteca estão em:

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

Especificador do Pacote: mongo-cxx-driver/3.8.0

Se você ainda não tiver o Conan instalado, instale-o e execute o comando de inicialização do Conan abaixo:

$ pip install conan
$ conan profile detect --force

Adicione o seguinte ao seu conanfile.txt:

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

Instale o driver via Conan e construa seu projeto:

$ 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

Os usuários do MacOS podem usar o Homebrew para instalar o driver C++ executando o seguinte comando:

brew install mongo-cxx-driver

Os cabeçalhos podem ser encontrados em:

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

Os arquivos da biblioteca podem ser encontrados em:

/opt/homebrew/lib/

Os cabeçalhos podem ser encontrados em:

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

Os arquivos da biblioteca podem ser encontrados em:

/usr/local/lib/

O driver mongocxx é baseado no driver MongoDB C.

A compilação do mongocxx-3.9.0 baixa e instala automaticamente o driver C se o driver C não for detectado. Para usar uma instalação existente do driver C, defina CMAKE_PREFIX_PATH como o diretório que contém a instalação do driver C. Para obter informações sobre a libmongoc versão mínima exigida para cada versão do driver C++ , consulte Compatibilidade com a libmongoc.

A menos que você saiba que seu gerenciador de pacote oferece uma versão suficientemente recente, você precisará baixar e construir a partir do código fonte. Obtenha um tarball na página da versão do C Driver.

Siga as instruções para criar a partir de um tarball em Instalando a libmongoc.

As melhores práticas do setor e alguns regulamentos exigem o uso do TLS 1.1 ou mais recente. O MongoDB C Driver suporta TLS 1.1 no Linux se o OpenSSL tiver pelo menos a versão 1.0.1. No macOS e no Windows, o C Driver usa implementações de TLS nativas que suportam TLS 1.1.

As subseções a seguir detalham opções avançadas para configurar o driver C++ e/ou suas dependências como bibliotecas estáticas em vez das bibliotecas compartilhadas típicas. Essas opções produzirão artefatos de biblioteca que se comportarão de forma diferente. Certifique-se de ter uma compreensão completa das implicações das várias abordagens de vinculação antes de utilizar essas opções.

Os usuários têm a opção de construir o mongocxx como uma biblioteca estática. Isso não é recomendado para usuários novatos. Um usuário pode habilitar este comportamento com a opção -DBUILD_SHARED_LIBS :

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

Os usuários têm a opção de construir o mongocxx como bibliotecas estáticas e compartilhadas. Um usuário pode habilitar este comportamento com a opção -DBUILD_SHARED_AND_STATIC_LIBS :

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

Os usuários têm a opção de construir o mongocxx como uma biblioteca compartilhada que vinculou estaticamente ao libmongoc. Isso não é recomendado para usuários novatos. Um usuário pode habilitar este comportamento com a opção -DBUILD_SHARED_LIBS_WITH_STATIC_MONGOC :

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

Passe o -DENABLE_TESTS=OFF como uma opção cmake para desabilitar a configuração dos destinos de teste.

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

Para instalar o driver C++ em um diretório não padrão, especifique CMAKE_INSTALL_PREFIX para o caminho de instalação desejado:

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

Considere também especificar a opção -DCMAKE_INSTALL_RPATH= para o diretório lib da instalação. Isto pode permitir que libmongocxx.so localize libbsoncxx.so:

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

Se o driver C estiver instalado em um diretório não padrão, especifique CMAKE_PREFIX_PATH para o caminho de instalação do driver C:

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

Observação

Se você precisar de vários caminhos em uma variável CMake PATH, separe-os com um ponto e vírgula como este: -DCMAKE_PREFIX_PATH="/your/cdriver/prefix;/some/other/path"

Em vez da opção -DCMAKE_PREFIX_PATH , os usuários devem especificar o diretório de instalação do libmongoc usando as opções -DLIBMONGOC_DIR e -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

Os aplicativos vinculados a uma instalação de diretório não padrão podem encontrar um erro ao carregar o driver C++ no tempo de execução. Exemplo:

# 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

O install name padrão do driver C++ no macOS inclui @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 no nome de instalação permite vincular aplicativos para controlar a lista de caminhos de pesquisa para a biblioteca.

app.out inclui o comando de carregamento para @rpath/libmongocxx._noabi.dylib. app.out não tem entradas para substituir @rpath.

Há várias maneiras de considerar resolver isso no macOS:

Passe DYLD_FALLBACK_LIBRARY_PATH para o diretório que contém as bibliotecas de drivers C++:

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

Como alternativa, a opção de vinculador -Wl,-rpath pode ser passada para adicionar entradas para substituir @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"

Se estiver criando o aplicação com cmake, as configurações padrão de RPATH inclua o RPATH completo para todas as bibliotecas usadas na árvore de construção. No entanto, ao instalar, o cmake limpará o RPATH desses alvos para que eles sejam instalados com um RPATH vazio. Isso pode resultar em um erro Library not loaded após a instalação.

Exemplo:

# 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 o -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=TRUE para que o rpath do executável seja mantido no destino da instalação.

# 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 a documentação do cmake para tratamento de RPATH para mais informações.

Os aplicativos vinculados a uma instalação de diretório não padrão podem encontrar um erro ao carregar o driver C++ no tempo de execução. Exemplo:

# 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

Existem várias maneiras de considerar resolver isso no Linux:

Passe LD_LIBRARY_PATH para o diretório que contém as bibliotecas de drivers C++:

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

Como alternativa, a opção do vinculador -Wl,-rpath pode ser passada para adicionar entradas do 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"

Se estiver criando o aplicação com cmake, as configurações padrão de RPATH inclua o RPATH completo para todas as bibliotecas usadas na árvore de construção. No entanto, ao instalar, o cmake limpará o RPATH desses alvos para que eles sejam instalados com um RPATH vazio. Isso pode resultar em um erro Library not loaded após a instalação.

Exemplo:

# 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 o -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=TRUE para que o rpath do executável seja mantido no destino da instalação.

# 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 a documentação do cmake para tratamento de RPATH para mais informações.

Voltar

BSON