MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Construindo o driver MongoDB C no Windows


Parece que a porta libsasl2 para o Windows não está completa. Embora eu tenha conseguido compilar a libsasl, não foi produzida nenhuma libsasl2. Parece que o SASL é usado pelo MongoDB C Driver for Kerberos. Não sei se eles tentaram fazer o Kerberos funcionar com o driver C no Windows sem uma porta da biblioteca libsasl2.

No entanto, consegui fazer com que o MongoDB C Driver finalmente compilasse. Inicialmente tentei compilar usando subdiretórios de C:\, ao contrário de C:\mongo-c-driver etc., mas isso não funcionou bem, mas quando compilei usando a estrutura de diretórios na documentação, a compilação foi bem-sucedida.

Para compilar, desativei a biblioteca SASL na compilação. Eu não acho que será necessário, a menos que você precise usar o Kerberos. Inicialmente, tive que desabilitar explicitamente o SASL (talvez por usar 64 bits) - isso pode ser feito com -DENABLE_SASL=no ao compilar o mongo-c-driver.

Aqui estão os passos:

Fonte do driver desta página:https://github.com/mongodb/mongo- c-driver/lançamentos (1.3.5)

Obteve cmake de https://cmake.org/download/

Instalou o cmake usando o instalador do Windows, adicionando cmake ao caminho para todos os usuários. Eu tive que sair e entrar novamente para obter o caminho para atualizar.

Então, copiei a fonte mongo-c-driver-1.3.5 para c:\mongo-c-driver-1.3.5

Então,

Eu usei o prompt de comando do Visual Studio MSBuild, iniciado com Executar como administrador
C:\mongo-c-driver-1.3.5\src\libbson>cmake -DCMAKE_INSTALL_PREFIX=C:\libmongoc -G "Visual Studio 14"
-- The C compiler identification is unknown
-- The CXX compiler identification is unknown
CMake Error at CMakeLists.txt:3 (project):
  No CMAKE_C_COMPILER could be found.

CMake Error at CMakeLists.txt:3 (project):
  No CMAKE_CXX_COMPILER could be found.

-- Configuring incomplete, errors occurred!
See also "C:/mongo-c-driver-1.3.5/src/libbson/CMakeFiles/CMakeOutput.log".
See also "C:/mongo-c-driver-1.3.5/src/libbson/CMakeFiles/CMakeError.log".

Acontece que os compiladores C não são instalados com uma instalação padrão do Visual Studio, então tive que instalar o componente C++ do Visual Studio. Instalei o C++ Common Tools, mas não o MFC para C++ nem o XP Support. Dito isso, usaria 3 GB de espaço em disco (começou em 39,5, terminou em 37,0, então 2,5 GB usados)

Uma vez que foi instalado:
cd \mongo-c-driver-1.3.5\src\libbson
cmake -DCMAKE_INSTALL_PREFIX=C:\libmongoc -G "Visual Studio 14" .
msbuild.exe ALL_BUILD.vcxproj
msbuild.exe INSTALL.vcxproj
cd ..\..

C:\mongo-c-driver-1.3.5>cmake -DCMAKE_INSTALL_PREFIX=C:\libmongoc -DENABLE_SSL=WINDOWS -DBSON_ROOT_DIR=C:\libmongoc -G "Visual Studio 14" .
-- The C compiler identification is MSVC 19.0.23026.0
-- The CXX compiler identification is MSVC 19.0.23026.0
-- Check for working C compiler using: Visual Studio 14 2015
-- Check for working C compiler using: Visual Studio 14 2015 -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler using: Visual Studio 14 2015
-- Check for working CXX compiler using: Visual Studio 14 2015 -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found BSON: C:/libmongoc/lib/bson-1.0.lib;ws2_32
-- Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the system variable OPENSSL_ROOT_DIR (missing:  OPENSSL_LIBRARIES OPENSSL_INCLUDE_DIR)
-- Searching for sasl/sasl.h
--   Not found (specify -DCMAKE_INCLUDE_PATH=C:/path/to/sasl/include for SASL support)
-- Searching for libsasl2
--   Not found (specify -DCMAKE_LIBRARY_PATH=C:/path/to/sasl/lib for SASL support)
Current version (from VERSION_CURRENT file): 1.3.5
-- Configuring done
-- Generating done
-- Build files have been written to: C:/mongo-c-driver-1.3.5

O OpenSSL não estava presente, então obtive o Win32 OpenSSL v1.0.2h de 32 bits de http://slproweb. com/products/Win32OpenSSL.html

Então, eu instalei o OpenSSL. Alterado o diretório de instalação para C:\work\OpenSSL-Win32, e permiti que o instalador do OpenSSL instalasse os binários no diretório do sistema Windows

Agora,
C:\mongo-c-driver-1.3.5>cmake -DCMAKE_INSTALL_PREFIX=C:\libmongoc -DENABLE_SSL=WINDOWS -DBSON_ROOT_DIR=C:\libmongoc -G "Visual Studio 14" .
-- Found OpenSSL: optimized;C:/work/OpenSSL-Win32/lib/VC/ssleay32MD.lib;debug;C:/work/OpenSSL-Win32/lib/VC/ssleay32MDd.lib;optimized;C:/work/OpenSSL-Win32/lib/VC/libeay32MD.lib;debug;C:/work/OpenSSL-Win32/lib/VC/libeay32MDd.lib (found version "1.0.2h")
-- Searching for sasl/sasl.h
--   Not found (specify -DCMAKE_INCLUDE_PATH=C:/path/to/sasl/include for SASL support)
-- Searching for libsasl2
--   Not found (specify -DCMAKE_LIBRARY_PATH=C:/path/to/sasl/lib for SASL support)
Current version (from VERSION_CURRENT file): 1.3.5
-- Configuring done
-- Generating done
-- Build files have been written to: C:/mongo-c-driver-1.3.5

C:\mongo-c-driver-1.3.5>

msbuild.exe ALL_BUILD.vcxproj
(lots of output, with some yellow warnings, but no red errors)

msbuild.exe INSTALL.vcxproj

E agora o mongo-c-driver foi construído. Eu posso usá-lo com o Visual C++ para conectar ao meu servidor MongoDB usando ssl.

Agora, estou tentando descobrir como fazer com que o Embarcadero RADStudio C++ Builder use o novo mongo-c-driver. Apenas copiar os .dll's para a pasta do aplicativo resulta em um aborto na dll bson. O rastreamento de pilha fica assim: