为什么在Windows上无法正常使用OpenSSL链接

时间:2017-03-24 19:01:39

标签: c++ .net visual-studio visual-studio-2013 openssl

我使用OpenSSL 1.1.0d进行使用Visual Studio 2013构建的托管C ++项目.Build for Debug运行良好,但构建版本会生成这些链接器错误:

error LNK2019: unresolved external symbol _SSLv23_server_method
error LNK2019: unresolved external symbol _SSLv23_client_method
error LNK2019: unresolved external symbol _CRYPTO_num_locks
error LNK2019: unresolved external symbol _CRYPTO_set_locking_callback
error LNK2019: unresolved external symbol _CRYPTO_set_dynlock_create_callback
error LNK2019: unresolved external symbol _CRYPTO_set_dynlock_lock_callback
error LNK2019: unresolved external symbol _CRYPTO_set_dynlock_destroy_callback
error LNK2019: unresolved external symbol _OPENSSL_add_all_algorithms_noconf
error LNK2019: unresolved external symbol _EVP_cleanup
error LNK2019: unresolved external symbol _SSL_load_error_strings
error LNK2019: unresolved external symbol _SSL_library_init
error LNK2019: unresolved external symbol _ERR_free_strings
error LNK2019: unresolved external symbol _CONF_modules_free
error LNK2019: unresolved external symbol _sk_num
error LNK2019: unresolved external symbol _sk_value

我尝试过使用自己的OpenSSL版本以及来自sigmoid的预编译版本,结果是一样的。

我的假设是,虽然这些OpenSSL版本都使用' / MD'但仅凭这一点并不足以与我的托管C ++项目兼容。但是,由于没有从Managed层直接调用OpenSLL,我的理解是使用' / MD'应该足够了。另外,Debug版本工作得很好。那么为什么只发布一个扼流圈?

导致这些链接器错误的原因是什么,以及如何解决它们?

1 个答案:

答案 0 :(得分:0)

您可能使用了错误的OpenSSL版本。试试OpenSSL v1.0.2k。它抱怨的符号不包含在1.1.x分支中。

如果需要,请记住还要在ws_lib32.lib和crypt32.lib中进行链接。