在安装GmSSL库时遇到报错:
bin/libgmssl.so.3.0: undefined reference to `getentropy'
bin/libgmssl.so.3.0: undefined reference to `_rdseed64_step'
collect2: error: ld returned 1 exit status
CMakeFiles/gmssl-bin.dir/build.make:785: recipe for target 'bin/gmssl' failed
make[2]: *** [bin/gmssl] Error 1
CMakeFiles/Makefile2:284: recipe for target 'CMakeFiles/gmssl-bin.dir/all' failed
make[1]: *** [CMakeFiles/gmssl-bin.dir/all] Error 2
Makefile:165: recipe for target 'all' failed
make: *** [all] Error 2
因此来整理总结一下Ubuntu16.04安装GmSSL库遇到的问题及解决办法。
一、GmSSL库安装
1、首先下载GmSSL库:GmSSL 然后解压
2、按照提示步骤进行编译
二、make时遇到错误
参考:错误原因
网上对于这部分的解决方法只有上述一个参考,这是由于linux版本较低,没有getentropy这几个函数。该参考提供了解决方法,但是未指明应该修改哪部分,因此总结一下修改步骤方便以后遇到相同问题的朋友查找。
解决方法一:
根据编译过程中的提示,错误出现在GmSSL/src目录下的rdrand.c与rand_unix.c这两文件,因此对其进行修改。
1、对rdrand.c进行修改,修改内容如下
2、对rand_unix.c进行修改,修改内容如下:
通过修改后再进行make即可顺利通过!!
重点:这种方式虽然可以顺利安装,可以调用GmSSL库中的函数,但是在使用GmSSL命令生成根证书过程中,用到了sm2keygen命令时报错sm2keygen: inner failure。由于没有其他问题,那么问题就出在我们所更改的这两个文件中的函数上。因此对其研究后采用解决方法二可完美解决。
解决方法二:
1、对rdrand.c还是按照解决方法一进行修改。
2、将rand_unix.c文件中的getentropy函数改回去,即不要改动rand_unix.c文件。
然后参考该解决方法:undefined reference to `getentropy' · Issue #1392 · guanzhi/GmSSL (github.com)
将CMakeLists.txt的一下内容进行更改
更改完成后再进行编译安装即可通过。
此时再使用命令行生成密钥即可顺利通过!