我在文件rsatest.c
中有以下代码。我正在尝试生成一个RSA密钥对。未定义的OpenSSL中的RSA_generate_key引用?
#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中的符号确实没有定义。
为什么连接器似乎不能在这些库中找到定义?
使用'nm'工具来验证符号的位置 –
您应该使用['RSA_generate_key_ex'](http://www.openssl.org/docs/man1.0.2/crypto/RSA_generate_key_ex.html),而不是' RSA_generate_key'。 – jww