Qt 5.15编译(MinGW)及集成Crypto++ 8.8.0笔记

7 篇文章 1 订阅
1 篇文章 0 订阅
一、背景

  为使用AES加密库(AES/CBC加解密),选用Crypto ++库(官网)。
  最新Crypto C++库依次为:8.8.0版本(2023-6-25)、8.7.0(2022-8-7)和8.6.0(2021-9-24)。
  网上实践的最新版本为8.6.0(2023-1-30),其中提到8.7.0使用有问题,但没有描述具体问题。

二、思路 & 尝试

  笔者在其他工程中用到过8.7.0版本(基于vcpkg,较重),但基于上述博主的提示,暂按下8.7.0版本而使用8.6.0。
  步骤(有调整和优化)如下:

 1. 下载crypto++ 8.6.0代码并unzip生成工程文件夹 → cryptopp860.zip 
 2. 设置环境变量PATH,添加qmake和mingw32-make到全局路径
    验证:qmake -v  位置:<QT_HOME>\5.15.2\mingw81_64\bin\qmake
     	 g++ -v    位置:<QT_HOME>\Tools\mingw810_64\bin\mingw32-make.exe
 3. 创建工程文件(cryptopp860.pro)
	qmake -project 
 4. 编辑pro文件(cryptopp860.pro)
	① TEMPLATE从【app】改为【lib】
	② 添加定义和标识
	DEFINES += CRYPTOPPLIB_LIBRARY
	QMAKE_CXXFLAGS += "-msse4.2"
	QMAKE_CXXFLAGS += "-mavx"
	QMAKE_CXXFLAGS += "-mavx2"
	QMAKE_CXXFLAGS += "-mpclmul"
	QMAKE_CXXFLAGS += "-maes"
	QMAKE_CXXFLAGS += "-msha"
	③ 剔除工程文件中的 TestPrograms/xxx 项
 5. 删除工程文件夹中的GNUmakefile文件
	del GNUmakefile 
 6. 编译
	qmake 
	mingw32-make all 或 mingw32-make -j4(多线程、编译得快) 或
	直接使用Qt Creator IDE加载工程进行编译。

  编译过程基本正常,将得到两个文件:cryptopp860.dlllibcryptopp860.a(请注意文件大小)。如图:
编译出来的Crypto++动态库

三、问题 & 对策

  但是在引用该动态链接库时出现异常,错误信息为:

Crypto++ DLL integrity check may fail. Expected module base address is 0x42900000, but module loaded at 0x6dd40000.
Crypto++ DLL in-memory integrity check failed. This may be caused by debug breakpoints or DLL relocation.
Crypto++ DLL integrity check failed. Actual MAC is: 93318****AE8FF3****41D4****ADECE3****F2D.

Exception caught: FileStore: error opening file for reading: TestData/usage.dat

  经调试是动态链接库加载的问题,其中【TestData/usage.dat】为测试用数据。
  怀疑夹杂了其他的测试代码······继续剔除无用的测试代码单元(并同时从工程文件中剔除):
  ① 所有含test(不区分大小写)的文件夹(TestData、TestPrograms、TestVectors)。
  ② 所有含test、bench、validat字样的.cpp和.h文件。
  ③ 可选,所有vc或vs工程文件(.vcxproj)
  再次编译得到的链接库信息如图:
编译出来的Crypto++动态库
  对比可见.a文件“清爽”了不少。再次集成,一切正常。

四、集成引用动态链接库

  在demo工程的.pro文件添加引用指令:

INCLUDEPATH += $$PWD/cryptopp870  # 引用工程中新建文件夹cryptopp870,用于存放头文件
LIBS += -L$$PWD -lcryptopp870     # .dll 和 .a 文件放置于工程文件夹中

  demo工程结构如下:
在这里插入图片描述
  自此,Qt编译及集成Crypto++ 8.7.0 的问题已解决。
  具体包装Crypto++ 8.7.0库的代码,在后续介绍。

四、结论

  虽然基于源代码编译得到动态库的方式比较“透明”,但也考验使用者对代码的掌控能力。
Crypto++ 8.7.0版本代码的编译问题结症在于混杂了测试、验证代码,从而导致动态库无法加载。

 相关下载:
  8.7.0版本的qt工程版本下载地址,该工程直接可使用Qt Creator IDE打开加载。
  8.7.0版本的动态链接库MinGW 64 bit下载地址,该动态链接库可直接集成到其他Qt工程。

 有关包装Crypto++ 8.7.0库的代码,在后续介绍。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值