一、实验要求
完成下面任务(14分)
- MIRACL(Multiprecision Integer and Rational Arithmetic C/c++ Library)是著名的密码算法库,设法去官网下载安装MIRACL,提交Windows下安装过程截图或过程文本(2分)
- 在Windows下使用DevC++编译运行附件中MIRACL的测试代码,提交编译、运行过程截图或过程文本(6分)
- 在Windows下使用Visual Studio编译运行附件中MIRACL的测试代码,提交编译、运行过程截图或过程文本(6分)
作业提交要求(1’)
- 记录实践过程和AI问答过程,尽量不要截图,给出文本内容
- (选做)推荐所有作业托管到gitee或github上
- (必做)提交作业markdown文档,命名为“学号-姓名-作业题目.md”
- (必做)提交作业markdown文档转成的PDF文件,命名为“学号-姓名-作业题目.pdf”
二、实验步骤
1、下载并编译MIRACL静态库
访问MIRACL的GitHub仓库:https://github.com/miracl/MIRACL下载.zip压缩包。
解压
下载、安装Dev C++
使用DevC++打开config.c文件并进行编译
编译完成后会生成三个新的文件,如下图所示:
2、使用DevC++编译MIRACL的测试代码
在DevC++中新建静态库项目
将 miracl.lst 文件中列出的所有 C 程序文件从source文件夹下导入到项目源文件下:
编译运行,发现项目目录下生成了.a文件
调用静态库并进行测试
创建一个新的控制台项目
导入testmiracl.c项目
MIRACL目录下找到miracl.h和编译生成的mirdef.h,将这两个文件放到dev的inlude目录下:
编辑项目属性,将刚生成的miracl.a库链接在test项目
修改代码,编译并运行,得出结果如下:
#include <stdio.h>
#include "miracl.h"int main() {// 初始化 MIRACLmiracl *mip = mirsys(5000, 2); // 5000 是精度(位数),10 是进制// 定义大整数big a, b, sum, difference, product, quotient, remainder, result;// 为大整数分配内存a = mirvar(0);b = mirvar(0);sum = mirvar(0);difference = mirvar(0);product = mirvar(0);quotient = mirvar(0);remainder = mirvar(0);result = mirvar(0);// 将字符串转换为大整数cinstr(a, "123456789012345678901234567890");cinstr(b, "987654321098765432109876543210");// 显示输入的数字printf("a = ");cotnum(a, stdout);printf("b = ");cotnum(b, stdout);// 执行加法add(a, b, sum);printf("\n加法结果 = ");cotnum(sum, stdout);// 执行减法subtract(b, a, difference);printf("减法结果 = ");cotnum(difference, stdout);// 执行乘法multiply(a, b, product);printf("乘法结果 = ");cotnum(product, stdout);// 执行除法divide(a, b, quotient);printf("商 = ");cotnum(quotient, stdout);// 使用 modulo 计算余数divide(a, b, product);printf("余数 = ");cotnum(product, stdout);// 执行乘方运算 (a^2) 使用乘方函数powmod(a, mirvar(2), b, result); // 假设'b'为模数的简单幂模运算printf("乘方结果 (a^2 mod b) = ");cotnum(result, stdout);// 清理mirexit(); // 清理 MIRACLreturn 0;
}
3、使用VS编译MIRACL的测试代码
使用VS生成静态库文件
将 miracl.lst 文件中列出的所有 C 程序文件从source文件夹下导入到项目源文件下:
调整IDE属性
编译生成.lib文件
创建空白项目,链接静态库
将刚才生成的.lib文件和.pdb文件及miracl.h和mirdef.h复制到项目路径下
修改代码:
#include <stdio.h>
#include "miracl.h"int main() {// 初始化 MIRACLmiracl* mip = mirsys(5000, 2); // 5000 是精度(位数),2 是进制// 定义大整数big a, b, sum, difference, product, quotient, remainder, result;// 为大整数分配内存a = mirvar(0);b = mirvar(0);sum = mirvar(0);difference = mirvar(0);product = mirvar(0);quotient = mirvar(0);remainder = mirvar(0);result = mirvar(0);// 将字符串转换为大整数char str1[] = "12345678901234567890";char str2[] = "9876543210987654321";cinstr(a, str1); // ? char*cinstr(b, str2); // ? char*// 显示输入的数字printf("a = ");cotnum(a, stdout);printf("b = ");cotnum(b, stdout);// 执行加法add(a, b, sum);printf("\n加法结果 = ");cotnum(sum, stdout);// 执行减法subtract(b, a, difference);printf("减法结果 = ");cotnum(difference, stdout);// 执行乘法multiply(a, b, product);printf("乘法结果 = ");cotnum(product, stdout);// 执行除法divide(a, b, quotient);printf("商 = ");cotnum(quotient, stdout);// 使用 modulo 计算余数divide(a, b, product);printf("余数 = ");cotnum(product, stdout);// 执行乘方运算 (a^2) 使用乘方函数powmod(a, mirvar(2), b, result); // 假设 'b' 为模数的简单幂模运算printf("乘方结果 (a^2 mod b) = ");cotnum(result, stdout);// 清理mirexit(); // 清理 MIRACLreturn 0;}
编译运行,结果如下:
4、AI问答
- 我:
为什么DEVC++找不到头文件? - AI:
Dev-C++ 报错找不到头文件的原因通常与以下问题有关。以下是可能的原因及解决方法:
1. 头文件路径未正确配置
- 原因:Dev-C++ 不知道头文件的位置,因此无法找到它。
- 解决方法:
- 打开
Project Options
(右键项目名称 ->Project Options
)。 - 切换到
Directories
选项卡。 - 在
Include directories
中添加头文件所在的目录路径。- 例如,如果头文件在
include
文件夹中,添加./include
或完整路径(如C:/project/include
)。
- 例如,如果头文件在
- 点击
OK
保存设置。
- 打开
2. 头文件未包含在项目中
- 原因:头文件虽然存在于目录中,但未添加到项目中。
- 解决方法:
- 右键项目名称,选择
Add to Project
。 - 选择你的头文件(如
mylib.h
)并添加到项目中。
- 右键项目名称,选择
3. 头文件名拼写错误或路径错误
- 原因:
#include
语句中指定的头文件名或路径不正确。 - 解决方法:
- 检查
#include
语句中的文件名和路径是否正确。 - 例如:
#include "mylib.h" // 如果头文件在当前目录或已配置的路径中 #include "include/mylib.h" // 如果头文件在子目录中 #include <mylib.h> // 如果头文件在系统路径中
- 检查
4. 头文件未放在正确目录
- 原因:头文件可能被放在了错误的目录中,导致编译器无法找到。
- 解决方法:
- 将头文件移动到项目目录或已配置的
Include directories
中。
- 将头文件移动到项目目录或已配置的
5. 编译器未正确配置
- 原因:Dev-C++ 的编译器路径或配置可能有问题。
- 解决方法:
- 打开
Tools
->Compiler Options
。 - 确保
Compiler
选项卡中的路径配置正确。 - 如果问题仍然存在,尝试重新安装 Dev-C++ 或更换编译器(如 TDM-GCC)。
- 打开
6. 项目未正确保存或路径问题
- 原因:如果项目未保存或路径包含中文字符或特殊字符,可能会导致路径解析错误。
- 解决方法:
- 确保项目保存在一个纯英文路径中。
- 保存项目后重新打开。
7. 头文件未正确生成
- 原因:如果头文件是动态生成的(例如通过脚本或工具),可能未正确生成。
- 解决方法:
- 检查头文件是否实际存在。
- 确保生成头文件的工具或脚本正常运行。
示例配置
假设你的项目结构如下:
project/
├── include/
│ └── mylib.h
├── src/
│ └── main.cpp
└── lib/└── libmylib.a
- 在
Project Options
->Directories
->Include directories
中添加./include
。 - 在
main.cpp
中包含头文件:#include "mylib.h"
总结
如果 Dev-C++ 报错找不到头文件,请按照以下步骤排查:
- 检查头文件路径是否正确。
- 确保头文件已添加到项目中。
- 检查
#include
语句是否正确。 - 确保项目路径和编译器配置正确。
如果问题仍未解决,可以提供具体的错误信息和项目结构,我可以进一步帮助你分析问题!