This question already has answers here:
Linking libssl and libcrypto in GCC [duplicate]
(2个答案)
4年前关闭。
我在文件
我正在用
我得到以下错误。
我是否以错误的顺序链接库文件?我使用msys和mingw在Windows(64位)上制作了libcrypto.a和libssl.a,并且在同一系统上运行代码。
RSA_generate_key已在rsa.h中声明。在libcrypto.a中没有定义吗?
编辑 :
我也尝试过
并且我知道链接器将在库中从左到右查找定义。
但是,我得到了对各种函数的新的 undefined reference
我在网上查找时发现在gdi32和zlib库中缺少符号。所以我加了
编译器没有提示缺少库,因此我认为它们与mingw一起存在。仍然,我得到相同的输出。
我还使用了nm,发现在rand_win.o和c_zlib.o中确实没有定义符号。
为什么链接器似乎无法在这些库中找到定义?
据我所知,链接器具有 undefined symbol 的列表。当它处理libcrypto.a和libssl.a时, undefined symbol 列表中没有任何内容,因此他只是删除了库。然后,在处理rsatest之后,它在列表中包含一些内容,但不会在已处理的库中查找符号。
(2个答案)
4年前关闭。
我在文件
rsatest.c
中有以下代码。我正在尝试生成一个RSA 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
并且我知道链接器将在库中从左到右查找定义。
但是,我得到了对各种函数的新的 undefined reference
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
据我所知,链接器具有 undefined symbol 的列表。当它处理libcrypto.a和libssl.a时, undefined symbol 列表中没有任何内容,因此他只是删除了库。然后,在处理rsatest之后,它在列表中包含一些内容,但不会在已处理的库中查找符号。
10-08 14:51