We’ve used Mongocxx in our C++ application for several years, and recently decided to upgrade to VS2022 and Mongocxx 3.7.0/MongoC 1.22.2. Prior to this we were running VS2017 with MongoCXX 3.6.6/MongoC 1.21.1.
I am able to build MongoC successfully with the following CMake commands:
cmake ../../mongo-c-driver-r1.22.2^
-G "Visual Studio 17 2022"^
-A x64^
-DBUILD_VERSION=1.22.2^
-DENABLE_SSL=OPENSSL^
-DOPENSSL_ROOT_DIR=C:\3rdParty\OpenSSL-1.1.1s^
-DENABLE_SASL=SSPI^
-DENABLE_ICU=ON^
-DENABLE_SHM_COUNTERS=OFF^
-DENABLE_STATIC=ON^
-DENABLE_CRYPTO_SYSTEM_PROFILE=OFF^
-DENABLE_SHM_COUNTERS=OFF^
-DCMAKE_INSTALL_PREFIX=install^
-DCMAKE_PREFIX_PATH=install^
-DBUILD_SHARED_LIBS=OFF^
-DCMAKE_CXX_STANDARD=17^
-DENABLE_EXTRA_ALIGNMENT=OFF^
-DENABLE_BSON=ON^
-DENABLE_SNAPPY=OFF^
-DENABLE_ZSTD=OFF^
-DENABLE_TRACING=ON^
-DENABLE_AUTOMATIC_INIT_AND_CLEANUP=OFF
cmake --build . --config RelWithDebInfo
cmake --build . --config RelWithDebInfo --target install
And I’m able to build MongoCXX successfully with the following CMake commands:
cmake ../../mongo-cxx-driver-r3.7.0-release-build^
-G "Visual Studio 17 2022"^
-A x64^
-DCMAKE_BUILD_TYPE=Release^
-DBUILD_VERSION=3.7.0^
-DCMAKE_INSTALL_PREFIX=install^
-DBUILD_SHARED_LIBS=OFF^
-DCMAKE_CXX_STANDARD=17^
-DCMAKE_CXX_FLAGS="/Zc:__cplusplus /EHsc /D_ENABLE_EXTENDED_ALIGNED_STORAGE=0"^
-Dlibbson-static-1.0_DIR="C:\mongocxx\mongo-c-driver-r1.22.2\cmake-build\install\lib\cmake\libbson-static-1.0"^
-Dlibmongoc-static-1.0_DIR="C:\mongocxx\mongo-c-driver-r1.22.2\cmake-build\install\lib\cmake\libmongoc-static-1.0"^
cmake --build .
cmake --build . --target install
But when I try to use MongoCXX in my application I get the following unresolved externals:
|Error|LNK2019|unresolved external symbol usprep_openByType_58 referenced in function _mongoc_sasl_prep_impl|ResolverDataModelTests|C:\mojo\libs\ResolverDataModel\tests\mongoc-static-1.0.lib(mongoc-scram.obj)|1||
|Error|LNK2019|unresolved external symbol usprep_close_58 referenced in function _mongoc_sasl_prep_impl|ResolverDataModelTests|C:\mojo\libs\ResolverDataModel\tests\mongoc-static-1.0.lib(mongoc-scram.obj)|1||
|Error|LNK2019|unresolved external symbol usprep_prepare_58 referenced in function _mongoc_sasl_prep_impl|ResolverDataModelTests|C:\mojo\libs\ResolverDataModel\tests\mongoc-static-1.0.lib(mongoc-scram.obj)|1||
|Error|LNK2019|unresolved external symbol u_strToUTF8_58 referenced in function _mongoc_sasl_prep_impl|ResolverDataModelTests|C:\mojo\libs\ResolverDataModel\tests\mongoc-static-1.0.lib(mongoc-scram.obj)|1||
|Error|LNK2019|unresolved external symbol u_strFromUTF8_58 referenced in function _mongoc_sasl_prep_impl|ResolverDataModelTests|C:\mojo\libs\ResolverDataModel\tests\mongoc-static-1.0.lib(mongoc-scram.obj)|1||
|Error|LNK2019|unresolved external symbol compress2 referenced in function mongoc_compress|ResolverDataModelTests|C:\mojo\libs\ResolverDataModel\tests\mongoc-static-1.0.lib(mongoc-compression.obj)|1||
|Error|LNK2019|unresolved external symbol compressBound referenced in function mongoc_compressor_max_compressed_length|ResolverDataModelTests|C:\mojo\libs\ResolverDataModel\tests\mongoc-static-1.0.lib(mongoc-compression.obj)|1||
|Error|LNK2019|unresolved external symbol uncompress referenced in function mongoc_uncompress|ResolverDataModelTests|C:\mojo\libs\ResolverDataModel\tests\mongoc-static-1.0.lib(mongoc-compression.obj)|1||
I have tried so many combinations of things to get this to work (OpenSSL, Windows secure, SASL turned off, etc.) and I always end up with these 8 unresolved externals. I’m linking the following mongo libraries into my application:
libcrypto.lib
libssl.lib
secur32.lib
crypt32.lib
bcrypt.lib
dnsapi.lib
ws2_32.lib
bsoncxx-static.lib
bson-static-1.0.lib
mongocxx-static.lib
mongoc-static-1.0.lib
Is there another library that I’m missing?
Thanks for your help!