我正在将 OpenSSL 1.1.0d 用于使用 Visual Studio 2013 构建的托管 C++ 项目。构建调试效果很好,但构建发布会生成以下链接器错误:
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++ 项目兼容。然而,由于管理层没有直接调用 OpenSLL,因此我的理解是使用“/MD”进行构建就足够了。另外,调试版本工作得很好。那么为什么只有第一个版本会卡住呢?
导致这些链接器错误的原因是什么?如何解决这些错误?
最佳答案
您可能使用了错误的 OpenSSL 版本。尝试 OpenSSL v1.0.2k。它所提示的符号不包含在 1.1.x 分支中。
如有必要,请记得链接 ws_lib32.lib 和 crypt32.lib。
关于c++ - 为什么 OpenSSL 在 Windows 上无法正确链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43007289/