OpenSSL 交叉編譯與MQTT移植

概述

為了防止后來(lái)人走彎路本人綜合網(wǎng)上的各路教程,統(tǒng)計(jì)出一個(gè)自己成功方便的路徑,以便給其他有需求的人一些參考
一開(kāi)始是因?yàn)楣ぷ餍枨笮枰浦瞞qtt協(xié)議到嵌入式arm-linux上,使用的phao的mqtt支持包,一開(kāi)始看到phao官網(wǎng)上的說(shuō)明,便選擇embbed的嵌入式版本,但是嵌入式版本是不支持ssl的,可能是官網(wǎng)描寫(xiě)有誤,所以,要支持ssl,必須選擇標(biāo)準(zhǔn)的c版本進(jìn)行交叉編譯。

第一步

  1. 首先標(biāo)準(zhǔn)的c版本是需要OpenSSL的支持,我們先從 OpenSSL的官網(wǎng) 下載OpenSSL的最新版本 openssl-1.1.1-pre8.tar.gz
  2. 然后從github上下載zip包
  3. 在方便位置新建文件夾為template(推薦在主目錄)
mkdir ./template
  1. 將openssl-1.1.1-pre8.tar.gz和paho.mqtt.c-master.zip都放到template文件夾下備用


    image.png

第二步

  1. 首先將OpenSSL和paho.mqtt.c解壓到當(dāng)前目錄
cd ./template
tar -xzvf openssl-1.1.1-pre8.tar.gz 
 unzip paho.mqtt.c-master.zip 

解壓之后的情況應(yīng)該是這樣


image.png
  1. 先將OpenSSL進(jìn)行交叉編譯,這里我們需要修改Makefile
    先執(zhí)行
./config no-asm -shared --prefix=/home/dai/template/ssl-arm

perfix是為了把編譯完成的文件存放在template下的ssl-arm目錄下,需要使用絕對(duì)地址,如果像改變存放地址,可以自己進(jìn)行修改,

gedit ./openssl-1.1.1-pre8/Makefile 

ubuntu推薦使用圖形文本編輯器,如果是其他linux也可以使用vi編輯器
定位到90行將

CROSS_COMPILE=

改為

CROSS_COMPILE=arm-linux-

交叉編譯工具實(shí)際由你的目標(biāo)板來(lái)定
順便將123和124行的-m64刪除,我們這里不需要用到64編譯
然后保存并關(guān)閉,
接下來(lái)執(zhí)行

make -j3

如果出現(xiàn)錯(cuò)誤

crypto/threads_pthread.c: In function `CRYPTO_THREAD_lock_new':
crypto/threads_pthread.c:43: warning: implicit declaration of function `pthread_mutexattr_settype'
crypto/threads_pthread.c:43: error: `PTHREAD_MUTEX_RECURSIVE' undeclared (first use in this function)
crypto/threads_pthread.c:43: error: (Each undeclared identifier is reported only once
crypto/threads_pthread.c:43: error: for each function it appears in.)
Makefile:5122: recipe for target 'crypto/threads_pthread.o' failed
make[1]: *** [crypto/threads_pthread.o] Error 1
make[1]: *** Waiting for unfinished jobs....
make[1]: Leaving directory '/home/dai/template/openssl-1.1.1-pre8'
Makefile:171: recipe for target 'all' failed
make: *** [all] Error 2

打開(kāi)crypro目錄下的threads_pthread.c,在18行添加一句

#define PTHREAD_MUTEX_RECURSIVE PTHREAD_MUTEX_RECURSIVE_NP

即可,這是因?yàn)橛行﹍inux版本沒(méi)有定義此變量造成的但是兩者意義相同。
接著再執(zhí)行

make install

就可以在ssl-arm文件下看到這些


image.png

到現(xiàn)在為止的話,OpenSSL的編譯算是告一段落了

第三部

編譯paho.mqtt.c

  1. 打開(kāi)paho.mqtt.c-master下的makefile文件

在第129行添加

CFLAGS += -I../ssl-arm/include -lrt
LDFLAGS += -L../ssl-arm/lib

為ssl編譯出來(lái)的路徑,如有自行修改,便自行修改
接下來(lái)執(zhí)行

make -j3 CC=arm-linux-gcc

接下來(lái)就大功告成了,只要在build文件找到動(dòng)態(tài)庫(kù)就可以了,當(dāng)然,simple里的例程也可以測(cè)試運(yùn)行以下。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,544評(píng)論 19 139
  • 今天參加家長(zhǎng)會(huì),班級(jí)被安排到階梯教室,我心想可能是給以前喇叭里聽(tīng)到的聲音安排些觀眾,或者為了照相好看?,F(xiàn)實(shí)是有講座...
    七月的簡(jiǎn)書(shū)閱讀 624評(píng)論 1 3
  • 一、基本信息 1、產(chǎn)品名稱:螞蜂窩自由行2、版本號(hào):V8.0.73、體驗(yàn)環(huán)境:IOS10.3.2 二、產(chǎn)品信息 1...
    轉(zhuǎn)轉(zhuǎn)x閱讀 1,780評(píng)論 0 3
  • 個(gè)體和個(gè)體之間為什么要連接呢?…… 如果個(gè)體是單一的,那么它就失去了它存在的意義,人活著的意義就是《存在》 ,連接...
    吾心之旅閱讀 264評(píng)論 2 0

友情鏈接更多精彩內(nèi)容