Ale*_*lex 3 linux openssl makefile linker-errors
我试图让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;
}
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
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 toERR_load_crypto_strings'/ usr/local/ssl/lib // libssl.a(ssl_err.o):在函数ERR_load_SSL_strings':
ssl_err.c:(.text+0xc): undefined reference toERR_func_error_string'sssl_err.c :(.text + 0x28)中:未定义引用ERR_load_strings'
ssl_err.c:(.text+0x3c): undefined reference toERR_load_strings'collect2:ld返回1退出状态make:***[all]错误1
我究竟做错了什么?
干杯亚历克斯
正如scott_n对maillist的回答,但是在这里记录,将订单交换为-lssl -lcrypto.
说明:对于几乎所有系统上的静态C库,libxxx.a如果它们定义从已经链接的转换单元(即命令行中的左侧)引用的内容,则链接器只会引入类似库文件的成员.OpenSSL libssl有(众多)对libcrypto的引用.如果你首先链接-lcrypto,那么这些引用还没有被看到,所以libcrypto文件没有链接; 然后你链接-lssl并创建不满意的引用.在相互依赖也称为递归依赖的情况下,您可能需要重复一个库,-lcrypto -lssl -lcrypto但OpenSSL没有这样的"向后"引用.