20242817-李臻-课下测试:Windows MIRACL静态库使用测试

ops/2025/3/26 2:25:38/

一、实验要求

完成下面任务(14分)

  1. MIRACL(Multiprecision Integer and Rational Arithmetic C/c++ Library)是著名的密码算法库,设法去官网下载安装MIRACL,提交Windows下安装过程截图或过程文本(2分)
  2. 在Windows下使用DevC++编译运行附件中MIRACL的测试代码,提交编译、运行过程截图或过程文本(6分)
  3. 在Windows下使用Visual Studio编译运行附件中MIRACL的测试代码,提交编译、运行过程截图或过程文本(6分)

作业提交要求(1’)

  1. 记录实践过程和AI问答过程,尽量不要截图,给出文本内容
  2. (选做)推荐所有作业托管到gitee或github上
  3. (必做)提交作业markdown文档,命名为“学号-姓名-作业题目.md”
  4. (必做)提交作业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++ 不知道头文件的位置,因此无法找到它。
  • 解决方法
    1. 打开 Project Options(右键项目名称 -> Project Options)。
    2. 切换到 Directories 选项卡。
    3. Include directories 中添加头文件所在的目录路径。
      • 例如,如果头文件在 include 文件夹中,添加 ./include 或完整路径(如 C:/project/include)。
    4. 点击 OK 保存设置。

2. 头文件未包含在项目中

  • 原因:头文件虽然存在于目录中,但未添加到项目中。
  • 解决方法
    1. 右键项目名称,选择 Add to Project
    2. 选择你的头文件(如 mylib.h)并添加到项目中。

3. 头文件名拼写错误或路径错误

  • 原因#include 语句中指定的头文件名或路径不正确。
  • 解决方法
    • 检查 #include 语句中的文件名和路径是否正确。
    • 例如:
      #include "mylib.h"  // 如果头文件在当前目录或已配置的路径中
      #include "include/mylib.h"  // 如果头文件在子目录中
      #include <mylib.h>  // 如果头文件在系统路径中
      

4. 头文件未放在正确目录

  • 原因:头文件可能被放在了错误的目录中,导致编译器无法找到。
  • 解决方法
    • 将头文件移动到项目目录或已配置的 Include directories 中。

5. 编译器未正确配置

  • 原因:Dev-C++ 的编译器路径或配置可能有问题。
  • 解决方法
    1. 打开 Tools -> Compiler Options
    2. 确保 Compiler 选项卡中的路径配置正确。
    3. 如果问题仍然存在,尝试重新安装 Dev-C++ 或更换编译器(如 TDM-GCC)。

6. 项目未正确保存或路径问题

  • 原因:如果项目未保存或路径包含中文字符或特殊字符,可能会导致路径解析错误。
  • 解决方法
    • 确保项目保存在一个纯英文路径中。
    • 保存项目后重新打开。

7. 头文件未正确生成

  • 原因:如果头文件是动态生成的(例如通过脚本或工具),可能未正确生成。
  • 解决方法
    • 检查头文件是否实际存在。
    • 确保生成头文件的工具或脚本正常运行。

示例配置

假设你的项目结构如下:

project/
├── include/
│   └── mylib.h
├── src/
│   └── main.cpp
└── lib/└── libmylib.a
  1. Project Options -> Directories -> Include directories 中添加 ./include
  2. main.cpp 中包含头文件:
    #include "mylib.h"
    

总结

如果 Dev-C++ 报错找不到头文件,请按照以下步骤排查:

  1. 检查头文件路径是否正确。
  2. 确保头文件已添加到项目中。
  3. 检查 #include 语句是否正确。
  4. 确保项目路径和编译器配置正确。

如果问题仍未解决,可以提供具体的错误信息和项目结构,我可以进一步帮助你分析问题!


http://www.ppmy.cn/ops/169320.html

相关文章

二叉树之树的高以及遍历

二叉树的高其实很简单就一句话&#xff1a; 从根节点到叶节点的最长路径中的边数就是二叉树的高 int FindHeight(Btree root){int leftheight;int rightheight;if(rootNULL){return -1;}else{leftheightFindHeight(root->left );rightheightFindHeight(root->right );}r…

DeepSeek R1 本地部署指南 (3) - 更换本地部署模型 Windows/macOS 通用

0.准备 完成 Windows 或 macOS 安装&#xff1a; DeepSeek R1 本地部署指南 (1) - Windows 本地部署-CSDN博客 DeepSeek R1 本地部署指南 (2) - macOS 本地部署-CSDN博客 以下内容 Windows 和 macOS 命令执行相同&#xff1a; Windows 管理员启动&#xff1a;命令提示符 CMD ma…

【大模型】什么是循环神经网络(RNNs)

在人工智能&#xff08;AI&#xff09;的世界里&#xff0c;**循环神经网络&#xff08;Recurrent Neural Networks, RNNs&#xff09;**是一种非常强大的工具&#xff0c;特别适合处理序列数据。无论是语言、时间序列还是音乐&#xff0c;RNNs都能帮助我们理解和预测这些数据的…

每日一题第15届蓝桥杯c/c++本科B组省赛第3题

#include<iostream> using namespace std; int jud(int a) {int c 1;//位数while (a) {int t a % 10;if (c % 2 ! 0) {//奇数位if (t % 2 0)return 0;//偶数不符合}else {//偶数位if (t % 2 ! 0)return 0;//奇数不符合}c;a / 10;}return 1; } int main() {int count …

51单片机和STM32 入门分析

51单片机和STM32是嵌入式开发中两种主流的微控制器&#xff0c;它们在架构、性能、应用场景等方面存在显著差异。以下是两者的对比分析及选择建议&#xff1a; 1. 51单片机与STM32的定义与特点 51单片机 定义&#xff1a;基于Intel 8051内核的8位微控制器&#xff0c;结构简单…

NSSCTF(MISC)——[NSSRound#4 SWPU]Type Message

相应的做题地址&#xff1a;https://www.nssctf.cn/problem/2478 得到4个wav文件 使用DTMF Decoder工具&#xff0c;对D.wav进行识别 随波逐流&#xff0c;发现九宫格键盘解码能够得到flag 对其他3个文件依次进行识别解码 最终得到fNSSCTF{DTMFISREALLYEASY}

前端开发中使用whistle代理工具

代理工具有很多像‌比较有名的Charles、‌Fiddler&#xff0c;最近发现了一款宝藏代理工具whistle&#xff0c;看到团队中有很多人在用&#xff0c;刚开始还有点不太理解&#xff0c;前端我们一般代理接口解决跨域这些不都是直接在webpack、vite中配置代理规则就行了。 直到使…

《Next.js 14 App Router 实战:用「Server Actions」重构全栈表单的最佳实践》

文章目录 一、传统表单方案的七大痛点1.1 开发者调研数据&#xff08;N500&#xff09;1.2 Server Actions核心优势 二、十分钟搭建全栈表单系统2.1 启用实验性功能2.2 基础表单组件 三、六大企业级实战场景3.1 场景一&#xff1a;实时地址校验3.2 场景二&#xff1a;防刷验证集…