未定义的引用`ERR_load_crypto_strings'

Ale*_*lex 3 linux openssl makefile linker-errors

我试图让OpenSSL工作,但似乎链接有问题.这是我做的:

  1. 我从https://www.openssl.org/source/下载了OpenSSL for Linux.我尝试了0.9.8zc,1.0.0o和1.0.1j版本,都具有相同的结果.
  2. 我使用./config,make和sudo make install安装了每个OpenSSL版本.
  3. 出于调试目的,我去了/ usr/lib/ssl并使用了sudo chmod -R 777*来删除任何可能导致错误的限制.
  4. 我创建了以下程序:

main.c中:

#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)
  1. 我在与.c文件相同的目录中创建了以下makefile:

生成文件:

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)
  1. 当我运行makefile时,我收到以下错误:

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

我究竟做错了什么?

干杯亚历克斯

dav*_*085 8

正如scott_n对maillist的回答,但是在这里记录,将订单交换为-lssl -lcrypto.

说明:对于几乎所有系统上的静态C库,libxxx.a如果它们定义从已经链接的转换单元(即命令行中的左侧)引用的内容,则链接器只会引入类似库文件的成员.OpenSSL libssl有(众多)对libcrypto的引用.如果你首先链接-lcrypto,那么这些引用还没有被看到,所以libcrypto文件没有链接; 然后你链接-lssl并创建不满意的引用.在相互依赖也称为递归依赖的情况下,您可能需要重复一个库,-lcrypto -lssl -lcrypto但OpenSSL没有这样的"向后"引用.