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
  • Instalando 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
  • 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).

O driver mongocxx se baseia no driver MongoDB C.

A compilação de 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 mongocxx-3.10.x, libmongoc 1.25.0 ou posterior é necessário.

  • Para mongocxx-3.9.x, libmongoc 1.25.0 ou posterior é necessário.

  • Para mongocxx-3.8.x, libmongoc 1.24.0 ou posterior é necessário.

  • Para mongocxx-3.7.x, libmongoc 1.22.1 ou posterior é necessário.

  • Para mongocxx-3.6.x, libmongoc 1.17.0 ou posterior é necessário.

  • Para mongocxx-3.5.x, libmongoc 1.15.0 ou posterior é necessário.

  • Para mongocxx-3.4.x, libmongoc 1.13.0 ou posterior é necessário.

  • Para mongocxx-3.3.x, libmongoc 1.10.1 ou posterior é necessário.

  • Para mongocxx-3.2.x, libmongoc 1.9.2 ou posterior é necessário.

  • Para mongocxx-3.1.4+, libmongoc 1.7.0 ou posterior é necessário.

  • Para mongocxx-3.1.[0-3], libmongoc 1.5.0 ou posterior é necessário.

  • Para mongocxx-3.0.x, recomendamos o último 1.4.x versão do 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. Obter um tarball da versão do Driver C página.

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

Instalação no Linux