sql >> Base de Datos >  >> NoSQL >> MongoDB

Construyendo el controlador MongoDB C en Windows

Parece que el puerto libsasl2 a Windows no está completo. Aunque finalmente logré compilar libsasl, no se produjo libsasl2. Parece que MongoDB C Driver para Kerberos utiliza SASL. No sé si han intentado que Kerberos funcione con el controlador C en Windows sin un puerto de la biblioteca libsasl2.

Sin embargo, pude obtener el controlador MongoDB C para compilar finalmente. Inicialmente traté de compilar usando subdirectorios de C:\, a diferencia de C:\mongo-c-driver, etc., pero eso no funcionó bien, pero cuando compilé usando la estructura de directorios en la documentación, la compilación tuvo éxito.

Para que se compile, deshabilité la biblioteca SASL en la compilación. No creo que sea necesario a menos que necesite usar Kerberos. Inicialmente tuve que deshabilitar explícitamente SASL (quizás debido al uso de 64 bits), eso se puede hacer con -DENABLE_SASL=no al compilar mongo-c-driver.

Estos son los pasos:

Obtuve la fuente del controlador de esta página:https://github.com/mongodb/mongo- c-controlador/lanzamientos (1.3.5)

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

Instalado cmake usando el instalador de Windows, agregando cmake a la ruta para todos los usuarios. Tuve que cerrar sesión y volver a iniciar sesión para obtener la ruta de actualización.

Luego, copié la fuente mongo-c-driver-1.3.5 en c:\mongo-c-driver-1.3.5

Entonces,

Utilicé el símbolo del sistema de Visual Studio MSBuild, comencé con Ejecutar 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".

Resulta que los compiladores de C no están instalados con una instalación estándar de Visual Studio, por lo que tuve que instalar el componente C++ de Visual Studio. Instalé C++ Common Tools, pero no MFC para C++ ni XP Support. Dicho esto, usaría 3 GB de espacio en disco (comenzó en 39,5, terminó en 37,0, por lo que se usaron 2,5 GB)

Una vez que se instaló:

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

OpenSSL no estaba presente, así que obtuve Win32 OpenSSL v1.0.2h de 32 bits de http://slproweb. com/products/Win32OpenSSL.html

Luego, instalé OpenSSL. Cambié el directorio de instalación a C:\work\OpenSSL-Win32, y permití que el instalador de OpenSSL instalara los archivos binarios en el directorio del sistema de Windows

Ahora,

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

Y ahora se ha construido el mongo-c-driver. Puedo usarlo con Visual C++ para conectarme a mi servidor MongoDB usando ssl.

Ahora, estoy tratando de averiguar cómo hacer que Embarcadero RADStudio C++ Builder use el nuevo mongo-c-driver. Simplemente copiar los .dll en la carpeta de la aplicación da como resultado un aborto en el bson dll. El seguimiento de la pila se ve así: