Docker原理解讀
1195
2022-05-30
前言
上一篇分享了:《簡單認識認識mqtt及mosquitto》,但也只是分享了mqtt的一些概念及mosquitto的一些介紹。這不,就有讀者來催更了:
這一篇我們就來分享mqtt應用于進程間通信的實例。我們沿用《例說嵌入式實用知識之JSON數據》這篇文章的綜合demo來改造改造。那個綜合demo的功能是這樣子的:
這是以socket來作為進程間通信的方式,并且這個demo是基于Windows寫的,需要包含Windows特定的頭文件。
本篇筆記我們把上面這個綜合demo改為:
我們用mqtt來作為進程間通信的方式,在Linux下進程測試。
先貼代碼:
json_print進程源碼
json_print.c:
json_parse進程源碼
json_parse.c:
編譯運行
1、編譯生成json_parse、json_print程序:
gcc cJSON.c json_parse.c -L ../mosquitto/build/lib -lmosquitto -o json_parse gcc cJSON.c json_print.c -L ../mosquitto/build/lib -lmosquitto -o json_print
這里用到鏈接動態庫的方式生成可執行程序。關于動態鏈接與靜態鏈接,可查看往期筆記:《靜態鏈接與動態鏈接補充(Linux)》、《什么是動態鏈接與靜態鏈接?》。
2、執行json_parse、json_print程序:
執行這兩個程序會報錯:
./json_parse: error while loading shared libraries: libmosquitto.so.1: cannot open shared object file: No such file or directory /json_print: error while loading shared libraries: libmosquitto.so.1: cannot open shared object file: No such file or directory
這是因為 不能找到共享庫文件libmosquitto.so.1,加載失敗。
因為一般情況下Linux會在/usr/lib路徑中搜索需要用到的庫,而libmosquitto.so.1庫并不在這個路徑下。
解決方法有兩種:一種就是把這個文件拷貝至/usr/lib路徑下,但是一般不允許這樣做,一般用戶也不允許往這個路徑里拷貝東西。另一種就是把libmosquitto.so.1庫所在路徑增加為動態庫的搜索路徑,命令為:
export LD_LIBRARY_PATH=../mosquitto/build/lib:$LD_LIBRARY_PATH
關于這方面的說明可以閱讀往期筆記:《靜態鏈接與動態鏈接補充(Linux)》
按照上述方法添加動態庫搜索路徑之后就可以正常運行這兩個程序:
ParseResult.txt文本里得到:
實驗成功!
以上就是本次的分享,代碼寫得比較倉促,如有錯誤,麻煩指出,謝謝!由于準備demo花了挺多時間,包括注釋也寫了很多。所以本篇文章就不做過多的說明,感興趣的朋友可以結合本篇文章的demo及mosquitto/client/pub_client.c、mosquitto/client/sub_client.c這兩個源文件。
本篇文章的demo:
可在本公眾號聊天界面回復關鍵詞:json_mqtt_demo,即可獲取,若無法獲取可聯系我進行獲取。
【拜托了,物聯網!】有獎征文火熱進行中:https://bbs.huaweicloud.com/blogs/299476
IoT MQTT 任務調度
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。