MongoDB C驱动程序Windows未解析的外部符号

时间:2017-05-12 16:26:40

标签: c++ c windows mongodb msbuild

嘿伙计们,我希望这不是重复,但已经搜索过,并没有找到类似的问题。

我正在尝试使用visual studio在Windows 7 64bit上构建MongoDB C驱动程序,如http://mongoc.org/libmongoc/1.1.5/installing.html

中所述
cd mongo-c-driver-1.1.5\src\libbson
cmake -G "Visual Studio 10 Win64" "-DCMAKE_INSTALL_PREFIX=C:\mongo-c-driver"
msbuild.exe ALL_BUILD.vcxproj
msbuild.exe INSTALL.vcxproj

cd mongo-c-driver-1.1.5
cmake -G "Visual Studio 2010 Win64" "-DCMAKE_INSTALL_PREFIX=C:\mongo-c-driver" "-DBSON_ROOT_DIR=C:\mongo-c-driver"
msbuild.exe ALL_BUILD.vcxproj
msbuild.exe INSTALL.vcxproj

我做的完全相同,但是在为libmongoc构建ALL_BUILD.vcxproj时,我得到了未解析的外部符号,尝试了很多东西,但仍然达到了这个deadend。

Error   146 error LNK2019: unresolved external symbol X509_VERIFY_PARAM_set1_ip_asc referenced in function mongoc_stream_tls_openssl_new    C:\Users\Airy\Desktop\mongo-c-driver-1.6.2\mongoc-stream-tls-openssl.obj    mongoc_shared
Error   274 error LNK2019: unresolved external symbol X509_VERIFY_PARAM_set1_ip_asc referenced in function mongoc_stream_tls_openssl_new    C:\Users\Airy\Desktop\mongo-c-driver-1.6.2\mongoc-static-1.0.lib(mongoc-stream-tls-openssl.obj) test-load
Error   359 error LNK2019: unresolved external symbol X509_VERIFY_PARAM_set1_ip_asc referenced in function mongoc_stream_tls_openssl_new    C:\Users\Airy\Desktop\mongo-c-driver-1.6.2\mongoc-static-1.0.lib(mongoc-stream-tls-openssl.obj) test-secondary
Error   443 error LNK2019: unresolved external symbol X509_VERIFY_PARAM_set1_ip_asc referenced in function mongoc_stream_tls_openssl_new    C:\Users\Airy\Desktop\mongo-c-driver-1.6.2\mongoc-static-1.0.lib(mongoc-stream-tls-openssl.obj) test-replica-set-ssl
Error   527 error LNK2019: unresolved external symbol X509_VERIFY_PARAM_set1_ip_asc referenced in function mongoc_stream_tls_openssl_new    C:\Users\Airy\Desktop\mongo-c-driver-1.6.2\mongoc-static-1.0.lib(mongoc-stream-tls-openssl.obj) test-replica-set
Error   611 error LNK2019: unresolved external symbol X509_VERIFY_PARAM_set1_ip_asc referenced in function mongoc_stream_tls_openssl_new    C:\Users\Airy\Desktop\mongo-c-driver-1.6.2\mongoc-static-1.0.lib(mongoc-stream-tls-openssl.obj) test-sharded-cluster
Error   722 error LNK2019: unresolved external symbol X509_VERIFY_PARAM_set1_ip_asc referenced in function mongoc_stream_tls_openssl_new    C:\Users\Airy\Desktop\mongo-c-driver-1.6.2\mongoc-static-1.0.lib(mongoc-stream-tls-openssl.obj) test-libmongoc
Error   144 error LNK2019: unresolved external symbol X509_VERIFY_PARAM_set1_host referenced in function mongoc_stream_tls_openssl_new  C:\Users\Airy\Desktop\mongo-c-driver-1.6.2\mongoc-stream-tls-openssl.obj    mongoc_shared
Error   272 error LNK2019: unresolved external symbol X509_VERIFY_PARAM_set1_host referenced in function mongoc_stream_tls_openssl_new  C:\Users\Airy\Desktop\mongo-c-driver-1.6.2\mongoc-static-1.0.lib(mongoc-stream-tls-openssl.obj) test-load
Error   357 error LNK2019: unresolved external symbol X509_VERIFY_PARAM_set1_host referenced in function mongoc_stream_tls_openssl_new  C:\Users\Airy\Desktop\mongo-c-driver-1.6.2\mongoc-static-1.0.lib(mongoc-stream-tls-openssl.obj) test-secondary
Error   441 error LNK2019: unresolved external symbol X509_VERIFY_PARAM_set1_host referenced in function mongoc_stream_tls_openssl_new  C:\Users\Airy\Desktop\mongo-c-driver-1.6.2\mongoc-static-1.0.lib(mongoc-stream-tls-openssl.obj) test-replica-set-ssl
Error   525 error LNK2019: unresolved external symbol X509_VERIFY_PARAM_set1_host referenced in function mongoc_stream_tls_openssl_new  C:\Users\Airy\Desktop\mongo-c-driver-1.6.2\mongoc-static-1.0.lib(mongoc-stream-tls-openssl.obj) test-replica-set
Error   609 error LNK2019: unresolved external symbol X509_VERIFY_PARAM_set1_host referenced in function mongoc_stream_tls_openssl_new  C:\Users\Airy\Desktop\mongo-c-driver-1.6.2\mongoc-static-1.0.lib(mongoc-stream-tls-openssl.obj) test-sharded-cluster
Error   720 error LNK2019: unresolved external symbol X509_VERIFY_PARAM_set1_host referenced in function mongoc_stream_tls_openssl_new  C:\Users\Airy\Desktop\mongo-c-driver-1.6.2\mongoc-static-1.0.lib(mongoc-stream-tls-openssl.obj) test-libmongoc
Error   145 error LNK2019: unresolved external symbol X509_VERIFY_PARAM_set_hostflags referenced in function mongoc_stream_tls_openssl_new  C:\Users\Airy\Desktop\mongo-c-driver-1.6.2\mongoc-stream-tls-openssl.obj    mongoc_shared
Error   273 error LNK2019: unresolved external symbol X509_VERIFY_PARAM_set_hostflags referenced in function mongoc_stream_tls_openssl_new  C:\Users\Airy\Desktop\mongo-c-driver-1.6.2\mongoc-static-1.0.lib(mongoc-stream-tls-openssl.obj) test-load
Error   358 error LNK2019: unresolved external symbol X509_VERIFY_PARAM_set_hostflags referenced in function mongoc_stream_tls_openssl_new  C:\Users\Airy\Desktop\mongo-c-driver-1.6.2\mongoc-static-1.0.lib(mongoc-stream-tls-openssl.obj) test-secondary
Error   442 error LNK2019: unresolved external symbol X509_VERIFY_PARAM_set_hostflags referenced in function mongoc_stream_tls_openssl_new  C:\Users\Airy\Desktop\mongo-c-driver-1.6.2\mongoc-static-1.0.lib(mongoc-stream-tls-openssl.obj) test-replica-set-ssl
Error   526 error LNK2019: unresolved external symbol X509_VERIFY_PARAM_set_hostflags referenced in function mongoc_stream_tls_openssl_new  C:\Users\Airy\Desktop\mongo-c-driver-1.6.2\mongoc-static-1.0.lib(mongoc-stream-tls-openssl.obj) test-replica-set

...

提前致谢!

2 个答案:

答案 0 :(得分:1)

修正了它,使用了

cmake -G "Visual Studio 14 2015 Win64" "-DENABLE_SSL=WINDOWS" "-DCMAKE_INSTALL_PREFIX=C:\mongo-c-driver" "-DBSON_ROOT_DIR=C:\mongo-c-driver"

而不是

cmake -G "Visual Studio 2010 Win64" "-DCMAKE_INSTALL_PREFIX=C:\mongo-c-driver" "-DBSON_ROOT_DIR=C:\mongo-c-driver"

答案 1 :(得分:0)

默认情况下,mongoc将针对OpenSSL进行编译(如果可用)。 在这种情况下,报告的OpenSSL版本似乎以某种方式被破坏,因为问题中的代码仅在检测到OpenSSL 1.0.2及更高版本时运行: https://github.com/mongodb/mongo-c-driver/blob/1.5.5/src/mongoc/mongoc-stream-tls-openssl.c#L641-L656 我很好奇你有哪些OpenSSL版本?

mongoc还支持其他TLS库,例如本机Windows安全通道。

在mongoc 2.0中(当我们可以更改ABI / API时),我们打算将默认值从OpenSSL更改为平台本机实现(Windows安全通道,macOS安全传输),而不是默认为OpenSSL。 LibreSSL(libtls)也受支持,将在找到时使用。

配置使用哪个TLS库,如上面的评论所述,将-DENABLE_SSL = WINDOWS传递给cmake(或DARWIN用于macOS安全传输)。