五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

【Miracl密碼庫(kù)】編譯庫(kù)文件miracl.a/miracl.lib

2022-07-28 09:08 作者:C語(yǔ)言實(shí)驗(yàn)室  | 我要投稿

實(shí)驗(yàn)環(huán)境:MacOS 64位?

gcc版本

在官網(wǎng)下載Miracl密碼庫(kù)源碼,github上有Miracl的SDK源碼。

1、根據(jù)linux64描述,將mirdef.h64 mirdef.h mrcore.c等文件全部拷貝一份到一個(gè)單獨(dú)的文件目錄下,這個(gè)文件目錄將用于生成對(duì)應(yīng)的靜態(tài)庫(kù)文件。

2、在新建的文件目錄下,新建Makefile文件,用于管理所有的文件。(Makefile的應(yīng)用參考上一篇案例)

從第一個(gè)文件mrcore.c 開(kāi)始測(cè)試,Makefil文件如下

用make命令執(zhí)行Makefile文件,出現(xiàn)如下錯(cuò)誤提示

這是由于-m64不能被系統(tǒng)檢測(cè),為此,我們先去掉參數(shù)-m64。再次編譯

出現(xiàn)非常多的錯(cuò)誤,首先指出

typedef unsigned mr_dltype mr_large;

按照定義,這本身是沒(méi)有問(wèn)題的,mr_dltype本身就是一個(gè)聲明類型,導(dǎo)致這個(gè)錯(cuò)誤的原因,肯定是沒(méi)有聲明mr_dltype。所以定義unsigned mr_dltype的別名為mr_large,是不可能的,后面還有很多關(guān)于mr_large的錯(cuò)誤。現(xiàn)在需要知道m(xù)r_dltype在哪里定義?

在mirdef.h有對(duì)mr_dltype的定義,雖然miracl.h有對(duì)mirdef.h的包含,但是依然沒(méi)有起作用。

問(wèn)題應(yīng)該出在__int64的定義上,__int64為long long for Unix/Linux。

__int64為微軟MSVC定義的數(shù)據(jù)類型,long long為C99定義的數(shù)據(jù)類型。


寫一小段程序測(cè)試

在本系統(tǒng)上,long類型和long long類型,都是8字節(jié)大小,所能夠表示的數(shù)據(jù)范圍為-9223372036854775808~+9223372036854775807

而且,在本系統(tǒng)上,long long類型是可用的。


現(xiàn)在,修改mirdef.h中關(guān)于__int64的定義

在MacOS arm64上編譯,與數(shù)據(jù)類型__int64相關(guān),而__int64類型的原本定義是long long類型,在arm64上是支持的。


修改完成之后,再次用make編譯,是可以成功編譯的。

現(xiàn)在將其他的.c文件全部編譯到靜態(tài)庫(kù)文件中。

問(wèn)題又來(lái)了,在編譯mrmuldv.c的時(shí)候,出現(xiàn)了這樣的錯(cuò)誤提示

原因在于,gcc支持asm,但是不支持_asm,所以將mrmuldv.c對(duì)應(yīng)的定義修改

現(xiàn)在出現(xiàn)新的錯(cuò)誤

到這里出現(xiàn)錯(cuò)誤,屬于匯編部分內(nèi)容了。先不忙著去學(xué)習(xí)匯編,再次閱讀文檔發(fā)現(xiàn),在mrmuldv.any中給出了各種環(huán)境的可能文件,例如選擇mrmuldv.g64wen j文件,將mrmuldv.g64修改為mrmuldv.c,然后編譯,將出現(xiàn)類似下面的錯(cuò)誤。

很明顯,這是由于系統(tǒng)環(huán)境所導(dǎo)致的。如果選擇mrmuldv.ccc,然后將mrmuldv.ccc修改為mrmuldv.c,再次編譯應(yīng)該不會(huì)出現(xiàn)上述問(wèn)題了。


編譯過(guò)程中,可能遇到的問(wèn)題,可以參考GitHub上的問(wèn)題解決。

https://github.com/miracl/MIRACL/issues/4


3、測(cè)試編譯好的靜態(tài)庫(kù)

根據(jù)linux64的指導(dǎo),測(cè)試ecsgen,同樣的,利用Makefile管理項(xiàng)目。

將第二步生成的靜態(tài)庫(kù)放在我們的項(xiàng)目中,并添加上面的文件。

在linux64的指導(dǎo)里面,用的是g++編譯,gcc和g++是兩個(gè)不同版本,查看版本,發(fā)現(xiàn)兩者完全相同。

為什么用gcc編譯報(bào)錯(cuò)呢?

gcc是GNU開(kāi)發(fā)的針對(duì)c的編譯器,剛開(kāi)始只支持編譯c代碼,隨著gcc的發(fā)展愈發(fā)強(qiáng)大,后面gcc也支持編譯c++、Objective-c和java等,在編譯時(shí)需要通過(guò)設(shè)定參數(shù)指定編譯的語(yǔ)言。所以后來(lái),gcc默認(rèn)編譯的是c代碼。把參數(shù)給用戶設(shè)置顯然沒(méi)有那么友好,于是就專門針對(duì)c++ 開(kāi)發(fā)了g++編譯器。所以gcc是一個(gè)編譯器集合,而g++是針對(duì)c++的編譯器。因此,想要使用gcc編譯c++的代碼需要加上參數(shù) -lstdc++ 指令即可。

或者用g++編譯,也是OK的。

很不幸,雖然能夠正確編譯了,但是在測(cè)試的時(shí)候,還是出現(xiàn)了下面的錯(cuò)誤

這必然是由于ecurve函數(shù)調(diào)用失敗導(dǎo)致的,而導(dǎo)致這個(gè)錯(cuò)誤的原因,就是因?yàn)闆](méi)有添加common.ecs文件,將這個(gè)文件包含進(jìn)項(xiàng)目,再次測(cè)試,就能夠得到正確結(jié)果。

最后,測(cè)試項(xiàng)目中包含的文件如下

4、Miracl庫(kù)是一個(gè)非常強(qiáng)大的密碼庫(kù),在構(gòu)建這個(gè)項(xiàng)目的時(shí)候,最重要的是要生成SDK,這個(gè)過(guò)程就是生成靜態(tài)庫(kù)的過(guò)程,常常會(huì)遇到很多問(wèn)題。

主要問(wèn)題就是環(huán)境因素,在mrmuldv.any中給出了一系列的可能環(huán)境,根據(jù)自己的機(jī)器環(huán)境,選擇不同的環(huán)境代碼,才能夠得到自己的靜態(tài)庫(kù)。我想這也是為什么沒(méi)有給出一個(gè)固定的SDK的原因吧,畢竟每個(gè)人的應(yīng)用環(huán)境是不同的。但是,不得不說(shuō),這個(gè)SDK的搭建,確實(shí)存在很大的挑戰(zhàn)。所以,小編用Makefile來(lái)管理所有文件,希望讀者在應(yīng)用的時(shí)候,能夠輕松掌握。


更多內(nèi)容,歡迎關(guān)注公眾號(hào)了解。

【Miracl密碼庫(kù)】編譯庫(kù)文件miracl.a/miracl.lib的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
沅江市| 乐山市| 兰坪| 南木林县| 绥德县| 白银市| 喀喇沁旗| 延边| 囊谦县| 邢台市| 宁河县| 永清县| 呼伦贝尔市| 竹北市| 科尔| 鲁甸县| 阿克陶县| 且末县| 灵山县| 江川县| 通许县| 肥东县| 环江| 南川市| 广州市| 同江市| 云和县| 南岸区| 上栗县| 桂林市| 陆丰市| 岳西县| 扎兰屯市| 普安县| 威海市| 板桥市| 石家庄市| 从江县| 丹江口市| 荃湾区| 甘孜|