C语言系列之Miracl大数库调用 |
您所在的位置:网站首页 › cfree5使用 › C语言系列之Miracl大数库调用 |
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 |