6

尝试编译 freeRADIUS 服务器 2.2.3 时,我收到以下错误消息:

checking for OpenSSL version >= 0.9.7... yes
checking OpenSSL library and header version consistency... library: 90819f header: 90812f... no
configure: error: in `/Users/tyrexionibus/Downloads/freeradius-server-2.2.3':
configure: error: OpenSSL library version does not match header version

实际上,openSSL 版本是:

tyrexionibus$ openssl version
OpenSSL 1.0.1f 6 Jan 2014

位于 /usr/include/openssl/opensslv.h 的标头包含:

#define OPENSSL_VERSION_NUMBER 0x0090819fL

编辑它并不能解决问题。

我该如何解决这个问题?

4

7 回答 7

4

尝试删除 libssl-dev 并安装 libssl1.0-dev

  1. sudo apt 删除 libssl-dev
  2. sudo apt install libssl1.0-dev

这对我有用

于 2019-02-17T16:41:26.700 回答
3

问题是编译器和链接器搜索路径通常不一致。

默认情况下(除非使用 -isystem 或 -I 修改)GCC 搜索路径是:

  • /usr/local/包括
  • libdir/gcc/目标/版本/包含
  • /usr/目标/包括
  • /usr/包括

默认情况下(除非用 -L 修改)Apple 的链接器的搜索路径是:

  • /usr/lib
  • /usr/local/lib

默认情况下(至少在 Ubuntu 13.04 上使用 2.23.52.20130913)(除非使用 -L 修改)GNU 链接器的搜索路径是:

  • /usr/local/lib:
  • /lib/x86_64-linux-gnu:
  • /usr/lib/x86_64-linux-gnu:
  • /usr/lib/x86_64-linux-gnu/mesa:
  • /库:
  • /usr/lib:

当系统上安装了多个版本时,链接器和编译器可能会选择完全不同版本的库头文件和二进制文件。然后编译器可能会发出与库的 ABI 不兼容的代码,具有未定义且通常不受欢迎的行为。这就是添加检查的原因。

为了确保一致性,您应该将 --with-openssl-includes= 和 --with-openssl-libraries= 标志传递给配置脚本。然后,编译器和链接器将首先搜索这些目录。

./configure --with-openssl-includes=/usr/include --with-openssl-libraries=/usr/lib

将导致在大多数系统上使用捆绑或打包的 OpenSSL 库/头文件。

另一种选择是在配置时设置 LD_LIBRARY_PATH,尽管您还需要在初始化脚本中设置它,否则运行时版本检查(是的,我们很彻底)将失败。

于 2014-01-14T23:22:36.623 回答
3

在 OSX 10.10 (Yosemite) 中,我必须openssl使用brew.

$ brew update
$ brew install openssl
$ brew link --force openssl

验证版本。

$ openssl version
OpenSSL 1.0.2 22 Jan 2015

我可以看到它链接到哪个库。

$ otool -L /usr/local/bin/openssl
/usr/local/bin/openssl:
    /usr/local/Cellar/openssl/1.0.2/lib/libssl.1.0.0.dylib (compatibility version 1.0.0, current version 1.0.0)
    /usr/local/Cellar/openssl/1.0.2/lib/libcrypto.1.0.0.dylib (compatibility version 1.0.0, current version 1.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0)

在我的配置脚本中,我可以指定 OpenSSL 路径。

$ ./configure --with-ssl-dir=/usr/local/Cellar/openssl/1.0.2
于 2015-02-20T21:26:41.290 回答
1

您可能应该检查config.log生成者configure(在同一文件夹中):似乎您至少有 2 个甚至 3 个版本的 OpenSSL:0.9.8r、0.9.8y 和 1.0.1f。

解释:

1) OPENSSL_VERSION_NUMBER= 0x0090819fin/usr/include/openssl/opensslv.h表示0.9.8y安装到/usr;

2) 命令的输出openssl version表明您1.0.1f在 PATH 中的某个位置,但1.0.1f定义OPENSSL_VERSION_NUMBER0x1000106fL,而不是0x0090819f,因此它与上面的 1) 不同。

tyrexionibus$ openssl version
OpenSSL 1.0.1f 6 Jan 2014

3)90812f在配置手段的输出0.9.8r

您可能还会发现OpenSSL 版本矩阵可用于将十六进制的版本号(来自 opensslv.h)与人类可读的版本字符串匹配。

于 2014-01-14T10:49:03.720 回答
0

尝试这个

./configure --with-openssl-lib-dir=/usr/local/openssl/lib/ --with-openssl-include-dir=/usr/local/openssl/include/
于 2017-02-27T08:22:49.590 回答
0

这为我解决了...

sudo apt-get install libssl-dev
于 2018-12-17T16:31:24.127 回答
0

只是不要忘记在 /etc/ld.so.conf 中添加行

/usr/local/ssl/lib

并运行 ldconfig。

如果没有这一步,您的 libssl 将使用系统 lybcrypto 而不是您的系统。

相比

BEFORE:
=======
[root]/usr/local/ssl/lib> ldd ./libssl.so
    linux-vdso.so.1 (0x00007ffe4c93f000)
    libcrypto.so.1.0.0 => /lib64/libcrypto.so.1.0.0 (0x00007febbdcd3000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007febbdacf000)
    libc.so.6 => /lib64/libc.so.6 (0x00007febbd702000)
     /lib64/ld-linux-x86-64.so.2 (0x0000558484e69000)

AFTER:
======
[root]/usr/local/ssl/lib> ldd ./libssl.so
    linux-vdso.so.1 (0x00007ffcec2aa000)
    libcrypto.so.1.0.0 => /usr/local/ssl/lib/libcrypto.so.1.0.0    (0x00007fa347db5000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007fa347bb0000)
    libc.so.6 => /lib64/libc.so.6 (0x00007fa3477e4000)
    /lib64/ld-linux-x86-64.so.2 (0x00005567459c7000)

当我发现这个时我真的很高兴:=)

于 2016-02-06T09:23:24.617 回答