编译时,OpenSSL标头与当前版本不匹配

时间:2014-01-14 07:31:44

标签: header openssl freeradius

在尝试编译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

编辑它并不能解决问题。

我该如何解决这个问题?

7 个答案:

答案 0 :(得分:2)

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

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

  • 的/ usr /本地/包括
  • LIBDIR / GCC /目标/版本/包括
  • 的/ usr /目标/包括
  • 的/ usr /包括

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

  • / usr / lib中
  • 的/ usr /本地/ lib中

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

  • 的/ usr /本地/ lib中:
  • / LIB / x86_64的-Linux的GNU:
  • / usr / lib中/ x86_64的-Linux的GNU:
  • / usr / lib中/ x86_64的-Linux的GNU /台面:
  • / lib中:
  • / usr / lib中:

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

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

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

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

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

答案 1 :(得分:2)

在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

答案 2 :(得分:1)

您应该检查config.log生成的configure(在同一文件夹中):您似乎至少有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.1fOPENSSL_VERSION_NUMBER定义为0x1000106fL,而不是0x0090819f所以它与上面的1)不同。

tyrexionibus$ openssl version
OpenSSL 1.0.1f 6 Jan 2014

3)配置输出中的90812f表示0.9.8r

您可能还会发现an OpenSSL version matrix对于将十六进制中的版本号(来自opensslv.h)与人类可读的版本字符串相匹配非常有用。

答案 3 :(得分:1)

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

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

对我有用

答案 4 :(得分: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)

发现这个时我真的很开心:=)

答案 5 :(得分:0)

试试这个

./configure --with-openssl-lib-dir=/usr/local/openssl/lib/ --with-openssl-include-dir=/usr/local/openssl/include/

答案 6 :(得分:0)

这对我来说已经解决了...

set(CMAKE_MODULE_PATH "/home/afshin/libtorch/share/cmake/Torch;${CMAKE_MODULE_PATH}")
set(CMAKE_MODULE_PATH "/home/afshin/libtorch/share/cmake;${CMAKE_MODULE_PATH}")
set(CMAKE_MODULE_PATH "/home/afshin/libtorch;${CMAKE_MODULE_PATH}")
set(Torch_DIR "/home/afshin/libtorch;${Torch_DIR}")
set(Torch_DIR "/home/afshin/libtorch/share/cmake/Torch;${Torch_DIR}")
set(Torch_DIR "/home/afshin/libtorch/share/cmake;${Torch_DIR}")
set(DCMAKE_PREFIX_PATH "/home/afshin/libtorch/share/cmake/Torch;${DCMAKE_PREFIX_PATH}")
set(DCMAKE_PREFIX_PATH "/home/afshin/libtorch/share/cmake;${DCMAKE_PREFIX_PATH}")
set(DCMAKE_PREFIX_PATH "/home/afshin/libtorch;${DCMAKE_PREFIX_PATH}")