当存在openssl版本冲突时的gcc构建行为

时间:2019-02-06 01:17:00

标签: c++ gcc openssl g++ shared-libraries

我正在尝试使用gcc7构建我的c ++库(取决于facebook/folly)。重要注意事项

  • 以前,我是使用gcc 4.8构建该库的。
  • 由于gcc 5.2中引入了ABI不兼容性-我使用gcc 7从源代码(以及所有其他依赖的库,例如glog等)构建了愚蠢的-我正在使用更新的库和共享库。
  • 我的库使用openssl 1.1(甚至以前使用gcc 4.8构建它时),而愚蠢的(我正在使用的愚蠢版本)使用openssl 1.0.2

即使与openssl版本不兼容,我的库的构建也可以在gcc 4.8下正常运行,并显示以下警告

/usr/bin/ld: warning: libssl.so.10, needed by /home/<username>/folly/folly/1000.37.2.1/lib/libfolly.so, may conflict with libssl.so.1.1

我在gcc 7上也得到了完全相同的警告,但是我的构建现在因以下错误而失败

/usr/bin/ld: /home/<username>/folly/folly/1000.37.2.1/lib/libfolly.a(SSLSessionCacheManager.o): undefined reference to symbol 'SSL_CTX_get_ex_new_index@@libssl.so.10'
/usr/lib64/libssl.so.10: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status

我曾尝试针对命令行中缺少的 DSO 研究此问题-但其他问题中提到的解决方案似乎并不是我的情况。

我想在这里回答3个问题

  1. openssl版本不兼容是构建失败的原因吗?
  2. 为什么构建会在gcc 4.8中成功但在gcc 7上失败?
  3. 有没有一种方法可以解决此问题,而不必愚蠢地更新openssl版本(为此,我将不得不进行很多更改-这将需要我方面的代码更改)。我的图书馆仅使用openssl/md5.h

0 个答案:

没有答案