尝试编译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
编辑它并不能解决问题。
我该如何解决这个问题?
尝试删除libssl-dev并安装libssl1.0-dev
- sudo apt remove libssl-dev
- sudo apt install libssl1.0-dev
这对我有用
问题是编译器和链接器搜索路径通常不一致。
默认情况下(除非使用 -isystem 或 -I 修改),GCC 搜索路径为:
/- usr/local/include
- libdir/gcc/target/version/include /
- usr/target/include /
- usr/include
默认情况下(除非使用 -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-include= 和 --with-openssl-libraries= 标志传递给配置脚本。然后,编译器和链接器将首先搜索这些目录。
./configure --with-openssl-includes=/usr/include --with-openssl-libraries=/usr/lib
将导致捆绑或打包的 OpenSSL 库/标头在大多数系统上使用。
另一种选择是在配置时设置LD_LIBRARY_PATH,尽管您还需要在 init 脚本中设置此设置,否则运行时版本检查(是的,我们很彻底)将失败。
在 OSX 10.10(优胜美地)中,我必须使用brew
自定义安装openssl
。
$ 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
您可能应该检查configure
生成的config.log
(在同一文件夹中):似乎您至少有 2 个甚至 3 个版本的 OpenSSL:0.9.8r、0.9.8y 和 1.0.1f。
解释:
1)OPENSSL_VERSION_NUMBER
=0x0090819f
在/usr/include/openssl/opensslv.h
表示0.9.8y
被安装到/usr
中;
2)命令openssl version
的输出表明您在PATH中的某个地方1.0.1f
,但1.0.1f
OPENSSL_VERSION_NUMBER
定义为0x1000106fL
,而不是0x0090819f
,因此它与上面的1)不同。
tyrexionibus$ openssl version
OpenSSL 1.0.1f 6 Jan 2014
3)90812f
在配置的输出中表示0.9.8r
。
您可能还会发现 OpenSSL 版本矩阵可用于将十六进制版本号(来自 opensslv.h)与人类可读的版本字符串进行匹配。
只是不要忘记在/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)
发现这个时我真的很高兴:=)
试试这个
./configure --with-openssl-lib-dir=/usr/local/openssl/lib/ --with-openssl-include-dir=/usr/local/openssl/include/
这为我修复了它...
sudo apt-get install libssl-dev