在 OpenSSL 中未定义对 RSA_generate_key 的引用?
Undefined reference to RSA_generate_key in OpenSSL?
我在文件 rsatest.c
中有以下代码。我正在尝试生成 RSA 密钥对。
#include <openssl/rsa.h>
#include <openssl/pem.h>
int main(){
RSA *rsa = RSA_generate_key((const int) 1024,(const int) 3, 0, 0);
return 0;
}
我正在用
编译这个
gcc -I../include/ -L . -lcrypto -lssl rsatest.c
我收到以下错误。
undefined reference to `RSA_generate_key'
我是否以错误的顺序链接库文件?我用 msys 和 mingw 在 windows(64 位)上制作了 libcrypto.a 和 libssl.a,我是 运行 同一系统上的代码。
RSA_generate_key 已在 rsa.h 中声明。 libcrypto.a中没有定义吗?
编辑:
我也试过了,
gcc -I../include rsatest.c -L . -lcrypto -lssl
我知道链接器会在库中从左到右查找定义。
但是,我在
中得到了对各种函数的新的未定义引用
rand_win.o and c_zlib.o
我在网上查了一下,在库gdi32和zlib中找到了缺失的符号。所以我添加了
-lz and -lgdi32
编译器没有抱怨缺少库,所以我假设它们存在于 mingw 中。而且,我得到了相同的输出。
我也用了nm,发现rand_win.o和c_zlib.o中的符号确实是未定义的。
为什么链接器似乎无法在这些库中找到定义?
更改 gcc 命令中的顺序。
gcc -I../include/ rsatest.c -L . -lcrypto -lssl
据我所知链接器有一个未定义符号列表。当它处理 libcrypto.a 和 libssl.a 时,它在未定义符号列表中没有任何内容,所以他只是删除了库。然后在处理 rsatest 后,它的列表中有一些东西,但它不会在已处理的库中查找符号。
我在文件 rsatest.c
中有以下代码。我正在尝试生成 RSA 密钥对。
#include <openssl/rsa.h>
#include <openssl/pem.h>
int main(){
RSA *rsa = RSA_generate_key((const int) 1024,(const int) 3, 0, 0);
return 0;
}
我正在用
编译这个gcc -I../include/ -L . -lcrypto -lssl rsatest.c
我收到以下错误。
undefined reference to `RSA_generate_key'
我是否以错误的顺序链接库文件?我用 msys 和 mingw 在 windows(64 位)上制作了 libcrypto.a 和 libssl.a,我是 运行 同一系统上的代码。
RSA_generate_key 已在 rsa.h 中声明。 libcrypto.a中没有定义吗?
编辑:
我也试过了,
gcc -I../include rsatest.c -L . -lcrypto -lssl
我知道链接器会在库中从左到右查找定义。
但是,我在
中得到了对各种函数的新的未定义引用rand_win.o and c_zlib.o
我在网上查了一下,在库gdi32和zlib中找到了缺失的符号。所以我添加了
-lz and -lgdi32
编译器没有抱怨缺少库,所以我假设它们存在于 mingw 中。而且,我得到了相同的输出。
我也用了nm,发现rand_win.o和c_zlib.o中的符号确实是未定义的。
为什么链接器似乎无法在这些库中找到定义?
更改 gcc 命令中的顺序。
gcc -I../include/ rsatest.c -L . -lcrypto -lssl
据我所知链接器有一个未定义符号列表。当它处理 libcrypto.a 和 libssl.a 时,它在未定义符号列表中没有任何内容,所以他只是删除了库。然后在处理 rsatest 后,它的列表中有一些东西,但它不会在已处理的库中查找符号。