MQTT源碼編譯和Ubuntu下連接阿里雲

環境說明

阿里雲部署mqtt代理

  • SecureCRT遠程登陸阿里雲
    在這裏插入圖片描述
    2、使用儲存庫安裝 EMQ X

    • 安裝所需要的依賴包
      sudo apt update && sudo apt install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common
      在這裏插入圖片描述

    • 添加 EMQ X 的官方 GPG 密鑰
      curl -fsSL https://repos.emqx.io/gpg.pub | sudo apt-key add - 在這裏插入圖片描述

    • 使用以下命令設置 stable 存儲庫
      sudo add-apt-repository “deb [arch=amd64] https://repos.emqx.io/emqx-ce/deb/debian/ $(lsb_release -cs) stable”
      這裏不會打印任何信息在這裏插入圖片描述

    • 更新 apt 包索引
      sudo apt update
      在這裏插入圖片描述

    • 安裝最新版本的 EMQ X
      sudo apt install emqx
      這裏稍微等待,需要下載19M.在這裏插入圖片描述

    • 查詢可用版本
      sudo apt-cache madison emqx
      在這裏插入圖片描述

    • 使用第二列中的版本字符串安裝特定版本,例如 4.0.0
      sudo apt install emqx=4.0.0

      這裏稍微等待,出現選項選y在這裏插入圖片描述

    • 啓動 EMQ X
      emqx start
      在這裏插入圖片描述

    • 查看狀態
      emqx_ctl status
      在這裏插入圖片描述
      至此mqtt代理服務器就搭建完成了。

動態庫和靜態庫

  • 動態庫
    linux下動態庫文件以 lib*.so結尾。

    動態庫在程序編譯時並不會被連接到目標代碼中,而是在程序運行用到相應的函數時纔會被被載入,因此編譯出來的可執行文件比較小,在程序運行時還需要動態庫存在,動態庫的改變不會影響程序,後期程序的升級比較方便。多個應用程序可以使用同一個動態庫,啓動多個應用程序的時候,只需要將動態庫加載到內存一次。

    由於動態庫使得可執行文件小,Linux下編譯的默認動作是動態庫。

  • 靜態庫
    靜態庫文件以 lib*.a結尾,多個*.o文件打包生成靜態庫文件。

    靜態庫在程序編譯時會被鏈接到目標代碼中,程序運行時將不再需要該靜態庫。編譯之後程序文件大,但加載快,隔離性也好,如果靜態庫改變,整個程序將重新編譯。

mqtt源碼動態庫編譯

  • 在git下下載paho C庫
    git clone https://github.com/eclipse/paho.mqtt.c.git

  • 進入到mqtt根目錄下,make編譯動態庫

    make之後出現錯誤 在這裏插入圖片描述
    解決方法

    下載libssl-doc
    在這裏插入圖片描述
    但是會出現以下錯誤
    在這裏插入圖片描述
    所以我找遍了百度終於找到以下解決方案
    在這裏插入圖片描述
    在這裏插入圖片描述
    運行sudo aptitude install libssl-dev的時候會出現三個反問,注意第一個選n,不接受這個包,降級處理,第二個和第三個選y。

    最後就會再mqtt源碼根目錄下的build/output下生成動態庫
    在這裏插入圖片描述

  • 在mqtt源碼根目錄下運行make intsall安裝庫到ubuntu

    此時就可以在/usr/local/lib下看到庫了
    在這裏插入圖片描述

測試連接阿里雲

  • 將/paho.mqtt.c/src/samples目錄下的MQTTAsync_subscribe.c和MQTTAsync_publish.c拷貝到test目錄下

在這裏插入圖片描述

  • vim修改MQTTAsync_publish.c

    地址改成阿里雲的公網ip
    消息隨便改
    在這裏插入圖片描述

  • vim修改MQTTAsync_subscribe.c

  • gcc編譯,注:一定要添加鏈接庫
    在這裏插入圖片描述
    在這裏插入圖片描述
    生成可執行文件,分別用兩個終端運行在這裏插入圖片描述

  • 首先看一下阿里雲1883端口連接了多少個客戶端
    netstat -nat | grep -iw “1883” | wc -l
    在這裏插入圖片描述
    目前只有一個

  • 運行ubuntu中的兩個客戶端
    publish
    在這裏插入圖片描述
    訂閱端
    在這裏插入圖片描述

  • 此時阿里雲mqtt服務器連接了2個客戶端,按理說應該連接3個,但是發佈端發佈完消息後立即斷開了,所以只有兩個。
    在這裏插入圖片描述

到這裏阿里雲mqtt服務器已經搭建成功,源碼編譯mqtt客戶端完成,並且成功做了測試。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章