C语言系列之Miracl大数库调用

您所在的位置:网站首页 cfree5使用 C语言系列之Miracl大数库调用

C语言系列之Miracl大数库调用

2023-03-11 09:03| 来源: 网络整理| 查看: 265

0x00 前言

网上关于Miracl大数库使用的资料,在windows下基本上都是关于VC以及VS的教程,而这两个windows下C语言编程的IDE使用的编译器是cl.exe,但一般嵌入式等gcc用得更加广泛,相关编译器介绍见下图:

关于在windows环境下用gcc编译大数库的内容几乎没有,折腾了好久,在Linux环境下gcc编译Miracl库再gcc调用可以,然后把这个.a库拉到windows环境下gcc调用就不行。

思索了好久,突然想到gcc是Linux的标配,我们可以通过看Linux环境下gcc编译的脚本文件了解gcc编译大数库的步骤以及方法,然后再到windows环境下进行适当修改即可。

0x10 内容速览

1)编译大数库准备

2)非编译库调用

3)编译Miracl.a静态库

4)调用Miracl.a

0x20 主要内容

0x21 编译大数库准备:

这里我们使用国产IDE:C-free5,它的编译器用的就是gcc。

先新建一个工程和相关文件夹:

1)新建一个C-free 5的hello world工程;

2)建立相关文件夹:

bin文件夹:放程序执行目录,.exe等存放的地方;

inc文件夹:.h头文件存放的地方;

src文件夹:.c文件存放的地方;

main.c文件为工程主函数程序执行文件。

这里肯定是先要下载一个大数库的源码,可能在0x30总结的2)参考网址找到下载链接,或者是文末点击“阅读原文”获取。

然后我们先来分析一下,Linux下gcc编译大数库的脚本文件(在下载的大数库源码source文件夹内的linux文件),用记事本或者notepad++打开后,见下图:

简单分析一下这个makefile写的编译脚本:

1-2行:删除所有.exe和miracl.a文件;

3和14:都是在复制文件并改名,然后4到13行之间都是在编译.c文件(这里为了好看删掉了一部分,省略号代表还有很多其他相同操作);

16-22:编译成.a库,把相关的.o文件都包含进去这个静态库;

24-41:C++的编译库的相关操作。

从上面的分析,我们就大概知道了在windows下如何用gcc编译Miracl大数库:

1)首先我们在把Miracl源码里面的include文件夹的miracl.h、mirdef.lnx文件放到上面工程的inc文件夹,然后根据上述第3行,我们把mirdef.lnx文件修改为mirdef.h文件:

2)我们把3-13行涉及到的.c文件拉到上面工程的src文件,然后根据第14行,我们需要把mrmuldv.gcc文件改为mrmuldv.c文件后再放到src文件:

0x22 非编译库调用:

1)接下来我们用cfree5打开工程,点击工程->设置,按照如下进行配置:

A.改变程序运行目录;

B.gcc编译改为c99标准;

C.把bin、inc和src的路径加进去;

D. 将src文件夹的文件全部添加到工程的Source Files以及将inc文件夹的内容都添加到Header Files文件夹:

这里我们使用一段比较简单的大数库测试代码:

#include #include "miracl.h" int main(int argc, char *argv[]) { big a, b, c; miracl *mip = mirsys(5000, 16); a=mirvar(8); b=mirvar(7); c=mirvar(0); add(a, b, c); cotnum(c, stdout); return 0; }

点击运行,可以看到运行结果:

0x23 编译Miracl.a静态库

我们接着上面的工程进行Miracl.a静态库的编译:

1)点击工程->设置,按照如下进行修改:

2)我们把Source Files文件夹内的main.c文件删除,点击构建->构建参数,增加c99编译选项:

2)点击构建->重新构建:

然后我们就可以在bin文件夹中找到miracl.a文件。

0x23 调用Miracl.a

我们根据0x21新建一个cfree5工程之外,再新建一个lib文件夹,把上一步生成的miracl.a文件放到该lib文件夹里面:

然后src文件夹里面就不需要再包含.c文件,inc文件夹不变仍需要包含miracl.h和mirdef.h文件,工程->设置与上述不同,首先是增加c99编译以及需要连接miracl库,按照如下进行操作:

然后我们把miracl.h和mirdef.h头文件添加到Header Files文件夹,再把miracl.a添加到Other Files:

同样我们还是用0x21中的测试代码,进行测试,可以看到输出就是期望的结果。

0x30 其他问题

0x31 问题1:

出现该问题请参考:

https://blog.csdn.net/lurao/article/details/49847047

0x32 问题2:

如果出现编译库报错,一般都是因为“mrmuldv.gcc文件改为mrmuldv.c”这一步没有做。

0x40 总结

上面0x22中的编译大数库的原理同样适用于编译.lib、.so、.dll,但是需要注意区分windows环境和linux环境以及c的编译器类型即可。

完成了gcc在windows环境下编译大数据,这样我们就可以很容易在嵌入式中使用大数库。

其他参考网址:

1)Linux下编译并使用miracl密码库:

https://www.cnblogs.com/little-kwy/p/12285747.html

2)Visual Stdio 2017中编译调用miracl函数库

https://blog.csdn.net/qq_36290650/article/details/83421230

3)代码工程

https://github.com/782132930/Miracl_win_gcc

个人公众号:



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3