我正在尝试让OpenSSL工作,但似乎链接有问题。这是我做的:
#include <errno.h>
#include <malloc.h>
#include <resolv.h>
#include <openssl/bio.h>
#include <openssl/ssl.h>
int main(void) {
SSL_load_error_strings();
return EXIT_SUCCESS;
}
all: main.o
cc -o main main.o -L/usr/local/ssl/lib/ -lcrypto -lssl
main.o: main.c
cc -c -Wall main.c -I/usr/local/ssl/include/ -o main.o
cc -o main main.o -L / usr / local / ssl / lib / -lcrypto -lssl
/usr/local/ssl/lib//libssl.a(ssl_err2.o):在函数SSL_load_error_strings':
ssl_err2.c:(.text+0x4): undefined reference to
ERR_load_crypto_strings'中
/usr/local/ssl/lib//libssl.a(ssl_err.o):在函数ERR_load_SSL_strings':
ssl_err.c:(.text+0xc): undefined reference to
ERR_func_error_string'中
ssl_err.c :(。text + 0x28):对ERR_load_strings'
ssl_err.c:(.text+0x3c): undefined reference to
ERR_load_strings的未定义引用
collect2:ld返回1退出状态
make:*** [all]错误1
我做错了什么?
干杯 亚历
答案 0 :(得分:8)
正如scott_n对maillist的回答,但是在这里记录,将订单交换为-lssl -lcrypto
。
说明:对于几乎所有系统上的静态C库,libxxx.a
等库文件的成员只有在定义了已经链接的翻译单元引用的的内容时才会被链接器引入即命令行中的左侧。 OpenSSL libssl有(众多)对libcrypto的引用。如果你首先链接-lcrypto,那么这些引用还没有被看到,所以libcrypto文件没有链接;然后你链接-lssl并创建不满意的引用。如果相互依赖也称为递归依赖,您可能需要重复像-lcrypto -lssl -lcrypto
这样的库,但OpenSSL没有这样的“向后”引用。