deepin v20 系统,想使用gmssl加密库进行数据的加解密操作,开发环境使用QT6.5。
问题1、glibc的版本低,编译运行失败。
原因:直接下载编译好的gmssl3.1的tar包,解压后如果直接连接到qt工程中,则会出现该问题, 当前使用的deepin系统glibc的版本是 2.28 , 而gmssl需要glibc的是 2.34,因此 编译会出现undefined ref... 错误。
解决办法: 下载gmssl源码,重新编译、安装即可解决。按官方编译步骤执行即可。
1、mkdir build
2、cd build
3、 cmake ..
4、make
5、 make install (这里之前跳过make test)
问题2: 在编译、安装后, gmssl库和头分别被安装在 /usr/local/lib 和include 下面。
在代码中include gmss的头文件后,可以编译通过,但执行错误,提示 cannot found gmssl.so.3文件,即找不到gmssl的库。在这里百思不得其解,经过半天的折腾及百度。终于知道是 qt的运行环境变量中未包括 gmssl的库路径,因此需要把这个路径包含进去。
解决办法: 1、点击左侧栏上的项目配置按钮,打开项目配置界面。
2、选择当前编译器下的 “运行” ,打开运行配置界面
3、在右侧的界面上,在环境配置一栏,点击右侧的详情,展开环境变量列表,找到 LD_LIBRARY_PATH 一行,
4,选择 LD_LIBRARY_PATH 后,点击列表右侧的 “Edit”按钮,弹出编辑框。
5、点击“添加”按钮,选择gmssl库的路径,:/usr/local/lib,把这个路径添加进去,然后点击确定,关闭对话框。
这时候,点击项目的运行按钮,即可成功执行程序。
在这里还有一个问题就是如果在终端或双击点击程序,依然后出现刚才同样的错误,这是因为系统环境变量中没有 LD_LIBRARY_PATH 这个变量或者 没有包含这个路径,需要在.profile文件中添加一行:
export LD_LIBRARY_PATH = $LD_LIBRARY_PATH:/usr/loca/lib
完成后,执行: source .profile 重新加载配置,
这样终端中可以直接执行该程序了。
OK。记录一下。