我有以下测试代码来熟悉OpenSSL库:
#include <openssl/conf.h>
#include <openssl/evp.h>
#include <openssl/err.h>
#include <string.h>
#include <openssl/rsa.h>
#include <openssl/pem.h>
#include <openssl/bio.h>
RSA* createRSA2(const char* key) {
RSA* rsa = NULL;
BIO* keybio;
keybio = BIO_new_mem_buf(key, -1); // !!!
if (!keybio) {
return;
}
rsa = PEM_read_bio_RSA_PUBKEY(keybio, NULL, NULL, NULL); // !!!
if (!rsa) {
return;
}
BIO_free(keybio); // !!!
return rsa;
}
int main(void) {
char publicKey[] = "-----BEGIN PUBLIC KEY-----\n"\
"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy8Dbv8prpJ/0kKhlGeJY\n"\
"ozo2t60EG8L0561g13R29LvMR5hyvGZlGJpmn65+A4xHXInJYiPuKzrKUnApeLZ+\n"\
"vw1HocOAZtWK0z3r26uA8kQYOKX9Qt/DbCdvsF9wF8gRK0ptx9M6R13NvBxvVQAp\n"\
"fc9jB9nTzphOgM4JiEYvlV8FLhg9yZovMYd6Wwf3aoXK891VQxTr/kQYoq1Yp+68\n"\
"i6T4nNq7NWC+UNVjQHxNQMQMzU6lWCX8zyg3yH88OAQkUXIXKfQ+NkvYQ1cxaMoV\n"\
"PpY72+eVthKzpMeyHkBn7ciumk5qgLTEJAfWZpe4f4eFZj/Rc8Y8Jj2IS5kVPjUy\n"\
"wQIDAQAB\n"\
"-----END PUBLIC KEY-----\n";
const char* msg = "TESTMESSAGE";
RSA* rsaKey = createRSA2(publicKey);
printf("DONE\n");
RSA_free(rsaKey);
return 0;
}
它目前实际上并没有做任何事情。在继续研究示例之前,我想知道如何静态链接OpenSSL库以获得独立的exe。
当前我有以下设置:
此代码可以正常编译,但是Visual Studio还会生成应用程序所依赖的DLL(libcrypto-1_1.dll)。如果我将libssl.lib和libcrypto.lib更改为libssl_static.lib和libcrypto_static.lib,则会收到如下链接错误:
我如何静态链接OpenSSL以接收独立的可执行文件?
编辑: 这是文字图片:
Error LNK2019 unresolved external symbol __imp__WSAStartup@8 referenced in function _BIO_sock_init Project2 C:\Users\User\source\repos\Project2\Project2\libcrypto_static.lib(b_sock.obj) 1
Error LNK2019 unresolved external symbol __imp__WSACleanup@0 referenced in function _bio_sock_cleanup_int Project2 C:\Users\User\source\repos\Project2\Project2\libcrypto_static.lib(b_sock.obj) 1
Error LNK2019 unresolved external symbol __imp__WSAGetLastError@0 referenced in function _BIO_accept Project2 C:\Users\User\source\repos\Project2\Project2\libcrypto_static.lib(b_sock.obj) 1
答案 0 :(得分:0)
要解决未解决的Winsock错误,请查看OpenSSL项目。阅读Notes-Windows.txt。您需要与ws2_32.lib,crypt32.lib链接(其他库通常在Windows项目中默认链接)。
对于静态链接库,您可能需要build openssl *_static.lib。 顺序:克隆项目,安装构建实用程序,编辑makefile以进行静态链接。