LibTomCrypts算法库基于Visual Stduio 2019
最近在编写密码学作业的过程中学习了如何使用LibTomCrypts这个密码算法库,发现许多同学往往卡死在第一步,即如何在Visual Studio 2019环境下配置LibTomCrypts库,下面是我的一些解决方案,并且也已经将编译好的文件打包上传至Gitee(为了方便下载)
链接: LibTomCrypts-VisualStudio.
一、准备工作
从Github将两个开源的代码库下载下来
git clone https://github.com/libtom/libtommath.git
git clone https://github.com/libtom/libtomcrypt.git
如果下载比较慢的话,也可以从我给的Gitee地址里面直接下载
git clone https://gitee.com/zeroaone/lib-tom-crypts-visual-studio.git
解压并得到两个源码文件夹:
- libtomcrypt-1.18.2
- libtommath-1.0
二、编译libtommath
libtommath是libtomcrypt所依赖的库,我们需要首先编译libtommath库,我们首先双击libtommath_VS2008.sln,用Visual Studio打开项目,之后Visual Studio会自己对项目管理进行升级
之后若我们需要编译为32位程序使用的库,只需要将编译模式选择为Release,平台选择Win32,诺需要编译64位则重新配置x64平台,现在开始编译
......
1>正在生成代码...
1>正在编译...
1>bn_s_mp_sub.c
1>正在生成代码...
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\Microsoft.CppBuild.targets(1523,5): warning MSB8012: TargetPath(D:\下载\build\libtommath-1.0\Release\libtommath.lib) 与 Library 的 OutputFile 属性值(D:\下载\build\libtommath-1.0\Release\tommath.lib)不匹配。这可能导致项目生成不正确。若要更正此问题,请确保 $(OutDir)、$(TargetName) 和 $(TargetExt) 属性值与 %(Lib.OutputFile) 中指定的值匹配。
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\Microsoft.CppBuild.targets(1525,5): warning MSB8012: TargetName(libtommath) 与 Library 的 OutputFile 属性值(tommath)不匹配。这可能导致项目生成不正确。若要更正此问题,请确保 $(OutDir)、$(TargetName) 和 $(TargetExt) 属性值与 %(Lib.OutputFile) 中指定的值匹配。
1>libtommath_VS2008.vcxproj -> D:\下载\build\libtommath-1.0\Release\libtommath.lib
1>已完成生成项目“libtommath_VS2008.vcxproj”的操作。
========== 生成: 成功 1 个,失败 0 个,最新 0 个,跳过 0 个 ==========
之后我们可以在libtommath-1.0文件夹发现release文件夹,进入之后可以找到一个文件叫tommath.lib,这就是我们需要的静态库文件夹了,至此libtommath库编译完成,我们还需要libtommath-1.0文件夹里面的几个头文件,分别是:
- tommath.h
- tommath_class.h
- tommath_private.h
- tommath_superclass.h
这里建议新建一个名叫为build文件夹,里面有两个子文件夹:
- lib:用来存放编译好的静态库文件
- headers:用来存放需要用到的头文件
将这几个头文件放入headers文件夹,tommath.lib放入lib文件夹
三、编译libtomcrypt
下面的重头戏是开始编译libtomcrypt库,这里比较麻烦的是需要配置Visual Stduio的包含目录和库目录
这里我们进入libtomcrypt-1.18.2文件夹,然后点击libtomcrypt_VS2008.sln文件启动编译项目,在Visual Stduio里打开解决方案资源管理器,右键libtomcrypt选择属性
点击VC++ 目录,在包含目录里面编辑加入我们之前创建的headers文件夹,在库目录里面加入我们之前创建的lib文件夹,点击应用,然后开始编译
......
1>正在生成代码...
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\Microsoft.CppBuild.targets(1523,5): warning MSB8012: TargetPath(D:\下载\build\libtomcrypt-1.18.2\MSVC_Win32_Release\libtomcrypt.lib) 与 Library 的 OutputFile 属性值(D:\下载\build\libtomcrypt-1.18.2\MSVC_Win32_Release\tomcrypt.lib)不匹配。这可能导致项目生成不正确。若要更正此问题,请确保 $(OutDir)、$(TargetName) 和 $(TargetExt) 属性值与 %(Lib.OutputFile) 中指定的值匹配。
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\Microsoft.CppBuild.targets(1525,5): warning MSB8012: TargetName(libtomcrypt) 与 Library 的 OutputFile 属性值(tomcrypt)不匹配。这可能导致项目生成不正确。若要更正此问题,请确保 $(OutDir)、$(TargetName) 和 $(TargetExt) 属性值与 %(Lib.OutputFile) 中指定的值匹配。
1>libtomcrypt_VS2008.vcxproj -> D:\下载\build\libtomcrypt-1.18.2\MSVC_Win32_Release\libtomcrypt.lib
1>已完成生成项目“libtomcrypt_VS2008.vcxproj”的操作。
========== 生成: 成功 1 个,失败 0 个,最新 0 个,跳过 0 个 ==========
然后在libtomcrypt-1.18.2文件夹里面同样可以找到MSVC_Win32_Release文件夹,将里面的tomcrypt.lib文件放入我们之前创建的lib文件夹里面,然后在libtomcrypt-1.18.2文件夹里的src文件夹里的headers文件夹里可以取得libtomcrypt库对应的头文件,将这些头文件放入build里的headers文件夹里
至此完成对libtomcrypt库的编译工作
四、使用libtomcrypt库
在自己的工程文件里的需要配置VC++目录,在包含目录里面编辑加入我们之前创建的headers文件夹,在库目录里面加入我们之前创建的lib文件夹
添加第三方库的头文件:
在弹出的工程属性对话框中,左侧选择C/C++下的General,在右侧找到Additional Include Directories,将第三方库头文件即我们之前创建的headers文件夹添加进去
添加库文件所在目录:
工程属性对话框,左侧选择Linker:General,右侧找到Additional Library Directories,将第三方库的lib文件所在目录即我们之前创建的lib文件夹添加进去
将第三方库的lib文件指定为工程依赖库:
工程属性对话框,左侧选择Linker:Input,右侧找到Additional Dependencies,将所用到的第三方库的lib文件名添加进去:
- tomcrypt.lib
- tommath.lib
error C2065: “tfm_desc”: 未声明的标识符:
- 引用库的头文件之前先定义宏LTM_DESC
- main函数中添加一句
ltc_mp = ltm_desc;