未定义的引用`ERR_load_crypto_strings'

时间:2014-11-24 13:58:25

标签: linux makefile openssl 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. 我创建了以下程序:
  5. 的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;
    }
    
    1. 我在与.c文件相同的目录中创建了以下makefile:
    2. 生成文件:

      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
      
      1. 当我运行makefile时,出现以下错误:
      2. 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

        我做错了什么?

        干杯 亚历

1 个答案:

答案 0 :(得分:8)

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

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