国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁 > news >正文

響應(yīng)式網(wǎng)站的制作網(wǎng)站制作百度大數(shù)據(jù)查詢平臺

響應(yīng)式網(wǎng)站的制作網(wǎng)站制作,百度大數(shù)據(jù)查詢平臺,設(shè)計官網(wǎng)頁面多少錢,鞍山抖音seo新聞本篇主要內(nèi)容: 一、交叉編譯華為云Iot SDK依賴1.宿主機(jī)安裝交叉編譯工具鏈(1)選擇下載交叉編譯工具鏈(2)解壓、添加環(huán)境變量、重啟2.交叉編譯依賴庫(0) 準(zhǔn)備工作(1) 交叉…

本篇主要內(nèi)容:

      • 一、交叉編譯華為云Iot SDK依賴
        • 1.宿主機(jī)安裝交叉編譯工具鏈
        • (1)選擇下載交叉編譯工具鏈
        • (2)解壓、添加環(huán)境變量、重啟
        • 2.交叉編譯依賴庫
        • (0) 準(zhǔn)備工作
        • (1) 交叉編譯openssl
        • (2) 交叉編譯paho
        • (3) 交叉編譯zlib
        • (4) 交叉編譯華為安全函數(shù)庫
        • (★5)交叉編譯libssh
        • (★6)交叉編譯libnopoll
      • 二、移植SDK測試用例到OrangePi 3B運行
        • (1)配置交叉編譯華為云Iot SDK
        • (2)在華為云上創(chuàng)建"設(shè)備接入ioTDA"服務(wù)
        • (3)在Orangepi 3B上運行測試用例
      • 三、在cmake項目中使用SDK
        • (1)將SDK交叉編譯成動態(tài)庫
        • (2)在cmake中引入SDK動態(tài)庫


一、交叉編譯華為云Iot SDK依賴

🔖開發(fā)板: Orangepi 3B

🔖目標(biāo)操作系統(tǒng): Orangepi3b_1.0.0_ubuntu_jammy_desktop_xfce_linux6.6.0-rc5

🔖編譯平臺: ubuntu22.04_x86_64虛擬機(jī)

🔖交叉編譯器: gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu.tar.xz
(注意:這里要清楚開發(fā)板和編譯平臺/宿主機(jī)各自的操作系統(tǒng)架構(gòu),下面才能正確選擇交叉編譯器)

🔖說明: 這里參考了官方提供的文檔,可能由于版本更迭,按照文檔的步驟有報錯,而且文檔沒有提供可參考的交叉編譯的使用說明,出錯的解決方法網(wǎng)上也比較少,個人感覺不太友好。在文檔中,分別編譯了openssl庫、paho庫、zlib庫、華為安全函數(shù)boundscheck庫、libssh庫、libnopoll庫。下面是交叉編譯這6個庫移植到OrangePi3B的步驟,其中帶★的庫可以省略跳過,如果需求只是連接到iot平臺,上報數(shù)據(jù)、發(fā)布命令,實現(xiàn)遠(yuǎn)程控制的基本功能的話,只需要移植不帶★的庫即可,在官方論壇有看到僅編譯openssl和paho即可,經(jīng)過測試不適用,還需要zlib和boundscheck,可能sdk新舊版本的不同。

1.宿主機(jī)安裝交叉編譯工具鏈
(1)選擇下載交叉編譯工具鏈

交叉編譯工具鏈官方下載地址(國外)
?交叉編譯工具鏈清華開源鏡像站下載地址(國內(nèi))

在這里插入圖片描述

(2)解壓、添加環(huán)境變量、重啟
sudo tar -xvf arm-gnu-toolchain-13.2.rel1-x86_64-aarch64-none-linux-gnu.tar.xz -C /mnt
sudo vi /etc/environment  
# 添加路徑:/mnt/arm-gnu-toolchain-13.2.Rel1-x86_64-aarch64-none-linux-gnu/bin

在這里插入圖片描述

sudo reboot		#重啟永久生效,也可以使用命令source /etc/environment,僅在當(dāng)前會話生效

輸入aarch按tab鍵能補(bǔ)全aarch64-none-linux-gnu-就可以了,也可以使用aarch64-none-linux-gnu-gcc -v查看版本

2.交叉編譯依賴庫
(0) 準(zhǔn)備工作
sudo mkdir ~/mqtt_sdk && cd mqtt_sdk	# 在根目錄下新建目錄,存放以下編譯過程庫的源碼和過程文件
sudo git clone https://github.com/huaweicloud/huaweicloud-iot-device-sdk-c.git  # 下載SDK源碼

下面開始交叉編譯sdk所需要的庫,所有的庫源碼都下載到~/mqtt_sdk下

(1) 交叉編譯openssl
sudo wget https://www.openssl.org/source/openssl-3.2.0.tar.gz	# 下載源碼
sudo tar -zxvf openssl-3.2.0.tar.gz && sudo rm openssl-3.2.0.tar.gz && cd openssl-3.2.0/ # 解壓
sudo ./config no-asm --prefix=$(pwd)/_install --cross-compile-prefix=/mnt/gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-  
#配置,沒有生成Makefile需要檢查這一步,注意 要使用絕對路徑,no-asm表示不使用匯編代碼
# 接著我們vi打開生成的Makefile,搜索-m64有的可能是-m32,將這些鏈接選項都刪掉,下面編譯才不會報錯

在這里插入圖片描述

sudo make depend && sudo make -j20	#添加依賴并開始編譯
sudo make install -j20	# 安裝

編譯完成后已經(jīng)在頂層目錄生成交叉編譯的庫文件,個人感覺也可以不用安裝,直接拷貝這些文件。安裝完成后,在源碼目錄下的_install/openssl/lib64生成的庫文件,我們可以通過file libssl.so.3查看是否是交叉編譯生成的目標(biāo)平臺文件

在這里插入圖片描述

# 最后,直接把_install/目錄下我們需要的庫文件和頭文件拷貝到SDK源碼里
sudo cp _install/lib64/lib* ../huaweicloud-iot-device-sdk-c/lib/	# 庫文件
sudo cp -r _install/include/openssl/ ../huaweicloud-iot-device-sdk-c/include/	# 頭文件
(2) 交叉編譯paho
sudo git clone https://github.com/eclipse/paho.mqtt.c.git	# 獲取源碼

編譯paho庫需要使用到openssl庫以及頭文件,這里需要在Makefile中先指定好

cd paho.mqtt.c/ && sudo vi Makefile #打開Makefile,搜索DOXYGEN_COMMAND這個字段,在下面加入鏈接openssl的路徑,再指定編譯器
LDFLAGS += -L/home/$(shell logname)/mqtt_sdk/openssl-3.2.0/_install/lib64 -lrt
CFLAGS += -I/home/$(shell logname)/mqtt_sdk/openssl-3.2.0/_install/includeCC ::= /mnt/gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-gcc	# 如圖所示

在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述

sudo make clean && sudo make -j20	# 開始編譯,這里沒有配置安裝路徑就不安裝了
#編譯完成后,可以在build/output/目錄下看到生成的庫和頭文件,和前面一樣,我們直接拷貝到桌面lib目錄;
sudo cp build/output/libpaho-mqtt3* ../huaweicloud-iot-device-sdk-c/lib/	#拷貝庫文件
sudo cp src/*.h ../huaweicloud-iot-device-sdk-c/include/base/  #頭文件需要拷貝的sdk目錄下include/base
(3) 交叉編譯zlib
sudo wget https://github.com/madler/zlib/archive/v1.2.11.zip	# 下載源碼
sudo unzip v1.2.11.zip	&& sudo rm v1.2.11.zip && cd zlib-1.2.11/	# 解壓源碼并刪除壓縮包
sudo CC=/mnt/gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-gcc ./configure --prefix=$(pwd)/_install --libdir=$(pwd)/_install/lib --includedir=$(pwd)/_install/include	#配置交叉編譯工具、安裝路徑等
sudo make -j20 && sudo make install	# 編譯、安裝
sudo cp _install/lib/libz.* ../huaweicloud-iot-device-sdk-c/lib/    # 拷貝庫
sudo cp -r _install/include/ ../huaweicloud-iot-device-sdk-c/include/zlib    # 拷貝頭文件
(4) 交叉編譯華為安全函數(shù)庫
sudo git clone https://gitee.com/openeuler/libboundscheck.git && cd libboundscheck/  # 獲取源碼
# vi打開Makefile,直接將CC?=gcc改成下面這樣,sudo make在lib目錄下生成libboundscheck.so即可
CC::=/mnt/gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-gcc 
sudo make -j20	#編譯
sudo cp lib/libboundscheck.so ../huaweicloud-iot-device-sdk-c/lib/       # 拷貝庫文件

到這里就完成sdk依賴庫的編譯(對于只需要設(shè)備接入、上報數(shù)據(jù)和下發(fā)命令就足夠了),以下是官方文檔提到其它依賴庫交叉編譯


(★5)交叉編譯libssh
sudo wget https://www.libssh.org/files/0.10/libssh-0.10.6.tar.xz	# 下載源碼
sudo tar -xvf libssh-0.10.6.tar.xz && sudo rm libssh-0.10.6.tar.xz && cd libssh-0.10.6/	# 解壓

libssh使用cmake構(gòu)建項目,這里我們直接打開源碼頂層目錄的CMakeList.txt,在前面增加以下內(nèi)容即可

# 指定交叉編譯器
set(CROSS_COMPILE /mnt/gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-)
set(CMAKE_C_COMPILER ${CROSS_COMPILE}gcc)
set(CMAKE_CXX_COMPILER ${CROSS_COMPILE}g++)# 指定INSTALL、README提到的幾個選項
set(ZLIB_LIBRARY /home/zzk/mqtt_sdk/zlib-1.2.11/_install/lib)
set(ZLIB_INCLUDE_DIR /home/zzk/mqtt_sdk/zlib-1.2.11/_install/include)
set(OPENSSL_ROOT_DIR /home/zzk/mqtt_sdk/openssl-3.2.0)# 指定最后鏈接ld庫的選項
link_libraries("-L /home/zzk/mqtt_sdk/openssl-3.2.0/_install/lib64 -lcrypto")
link_libraries("-L /home/zzk/mqtt_sdk/zlib-1.2.11/_install/lib -lz")

在這里插入圖片描述

sudo mkdir build && cd build	# 新建build目錄用于構(gòu)建項目,源碼中INSTALL和README有講到
sudo cmake ..
sudo make -j20	# 編譯,完成后再build/lib生成libssh.so.4.9.6;這里如果按照官方手冊install就安裝到了系統(tǒng)
sudo cp lib/libssh.so* ../../huaweicloud-iot-device-sdk-c/lib/  #拷貝庫文件
sudo cp -r include/libssh/ ../../huaweicloud-iot-device-sdk-c/include/  #拷貝 頭文件
(★6)交叉編譯libnopoll

這個庫的INSTALL和README只有一個官網(wǎng)地址,報錯解決方法很難找。如果在編譯過程中,遇到./nopoll_decl.h:539:1: error: empty enum is invalid.優(yōu)先排查openssl鏈接路徑,再考慮openssl編譯過程是否正確

sudo wget http://www.aspl.es/nopoll/downloads/nopoll-0.4.8.b429.tar.gz	# 下載源碼
sudo tar -xvf nopoll-0.4.8.b429.tar.gz && sudo rm nopoll-0.4.8.b429.tar.gz  # 解壓
cd nopoll-0.4.8.b429/ 
sudo ./configure --prefix=$(pwd)/_install --host=aarch64-none-linux-gnu CC=/mnt/gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-gcc CFLAGS=-I/home/zzk/mqtt_sdk/openssl-3.2.0/_install/include LDFLAGS=-L/home/zzk/mqtt_sdk/openssl-3.2.0/_install/lib64 LIBS="-lssl -lcrypto"	# 缺少LIBS會編譯報錯
sudo make -j20
# 在頂層目錄_install下生成include和lib,同上,拷貝到SDK
sudo cp  _install/lib/libnopoll.* ../huaweicloud-iot-device-sdk-c/lib/
sudo cp _install/include/nopoll/*.h ../huaweicloud-iot-device-sdk-c/include/nopoll/

二、移植SDK測試用例到OrangePi 3B運行

(1)配置交叉編譯華為云Iot SDK
cd huaweicloud-iot-device-sdk-c/	#切換到sdk目錄
sudo vi Makefile	#打開頂層目錄的Makefile

打開SDK頂層的Makefile,第一行就是編譯器路徑,修改為交叉編譯工具鏈,如下

在這里插入圖片描述

暫時還不編譯,我們到華為云創(chuàng)建iot服務(wù),再修改sdk目錄下src/device_demo/device_demo.c,連接到平臺進(jìn)行測試
注意:目前sdk默認(rèn)使用的是mqtt3.1.1,本版本也支持mqtt5.0,不過需要在頂層目錄找到/include/util/mqttv5_util.h,搜索找到#define MQTTV5,并把注釋取消;在Makefile中找到MQTTV5 := 1,把注釋刪掉即可完成編譯。

在這里插入圖片描述

在這里插入圖片描述

(2)在華為云上創(chuàng)建"設(shè)備接入ioTDA"服務(wù)

大致步驟:開通服務(wù)->控制臺創(chuàng)建產(chǎn)品->創(chuàng)建設(shè)備(詳細(xì)步驟可見SDK源碼中的README),之后會得到如下的MQTT連接參數(shù)(三元組)

在這里插入圖片描述

sudo vi src/device_demo/device_demo.c	# 打開這個程序,填入連接參數(shù)

在這里插入圖片描述

注意:按照sdk文檔,理論上到這里編譯出的示例程序在開發(fā)板運行是不會出錯的,實際上運行效果卻是連接不上服務(wù)器,程序也不會異常退出,一直卡在---- start test -----,這是比較坑的地方,如果遇到了這種異常,優(yōu)先排查nopoll和openssl庫的編譯過程,因為在宿主機(jī)上編譯,如果鏈接路徑和頭文件路徑?jīng)]有指定清楚,可能會被系統(tǒng)自帶的x86 openssl庫影響

sudo make -j20	# 編譯程序,得到如下的可執(zhí)行程序MQTT_Demo
file MQTT_Demo		# 查看該程序運行的平臺
readelf -d MQTT_Demo | grep NEEDED		# 查看該程序運行時需要鏈接的庫

除了可執(zhí)行程序MQTT_Demo外,還需要將這些動態(tài)庫拷貝到開發(fā)板,為了方便這里就直接拷貝sdk里的lib/目錄

在這里插入圖片描述

(3)在Orangepi 3B上運行測試用例

根據(jù)上面的信息,將可執(zhí)行程序和鏈接庫(包括其軟鏈接)一起打包,上傳到目標(biāo)主機(jī)OrangePi 3B

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(pwd)/lib/		#導(dǎo)入鏈接庫環(huán)境變量
./MQTT_Demo	#運行,成功結(jié)果如下:

在這里插入圖片描述

在這里插入圖片描述

三、在cmake項目中使用SDK

到這里,我們已經(jīng)完成SDK及其依賴庫的交叉編譯,為了將SDK集成到我們的項目中,這里可以將SDK交叉編譯成動態(tài)庫,我們可以在cmake或者M(jìn)akefile中引入該動態(tài)庫和相關(guān)頭文件,就可以更方便地使用SDK了,并且像CLion、VScode等IDE也有代碼提示,方便代碼編寫

(1)將SDK交叉編譯成動態(tài)庫
sudo vi Makefile	#打開頂層目錄的Makefile,修改如下
sudo make clean		#清理
sudo make -j20		#重新編譯

🔖 接著在頂層目錄生成動態(tài)庫libHWMQTT.so ,將動態(tài)庫(及其依賴庫)拷貝到項目中的lib目錄,頭文件拷貝到include目錄,最后在CMakeList.txt或者是Makefile中去引入即可。
在這里插入圖片描述
在這里插入圖片描述

(2)在cmake中引入SDK動態(tài)庫

🔖 CMakeList.txt(實際環(huán)境不唯一,僅供參考):

cmake_minimum_required(VERSION 3.22.1)# 交叉編譯器
set(CROSS_COMPILE /mnt/gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-)
set(CMAKE_C_COMPILER ${CROSS_COMPILE}gcc)
project(smartHome_v2.0_rebuild C)# 包含SDK頭文件
set(SDK_INCLUDE_PATH ${CMAKE_SOURCE_DIR}/include)
include_directories(${SDK_INCLUDE_PATH})
include_directories(${SDK_INCLUDE_PATH}/protocol)
include_directories(${SDK_INCLUDE_PATH}/util)
include_directories(${SDK_INCLUDE_PATH}/base)
include_directories(${SDK_INCLUDE_PATH}/agentlite)
include_directories(${SDK_INCLUDE_PATH}/service)
# SDK依賴庫鏈接路徑
set(SDK_LIBS_PATH ${CMAKE_SOURCE_DIR}/lib)
link_libraries("-L ${SDK_LIBS_PATH} -lHWMQTT")
link_libraries("-L ${SDK_LIBS_PATH} -lpaho-mqtt3as")
link_libraries("-L ${SDK_LIBS_PATH} -lssl")
link_libraries("-L ${SDK_LIBS_PATH} -lcrypto")
link_libraries("-L ${SDK_LIBS_PATH} -lboundscheck")
link_libraries("-L ${SDK_LIBS_PATH} -lz")# 包含系統(tǒng)頭文件和系統(tǒng)庫
include_directories(/usr/include/cjson)
include_directories(/usr/include)
include_directories(/usr/local/include)# 本項目頭文件
include_directories(src/device)# 源文件
set(OBJS src/light.c src/voice_ctl.c src/main.c  src/device/device.c)
set(CMAKE_C_STANDARD 11)
add_executable(main ${OBJS})

在這里插入圖片描述

http://aloenet.com.cn/news/44622.html

相關(guān)文章:

  • 貴陽網(wǎng)站推廣網(wǎng)絡(luò)營銷策劃推廣方案
  • cad培訓(xùn)班一般學(xué)費多少深圳網(wǎng)站設(shè)計專家樂云seo
  • c語言除了做網(wǎng)站還能干什么廣州疫情升級
  • 網(wǎng)站建設(shè)公司六安網(wǎng)站seo方案
  • 龍巖網(wǎng)站建設(shè)全包sem和seo是什么職業(yè)
  • 中企動力做過的網(wǎng)站女教師遭網(wǎng)課入侵視頻
  • wordpress獲取當(dāng)前目錄父目錄id吉林seo管理平臺
  • 縣文化館網(wǎng)站建設(shè)方案市場調(diào)研報告1000字
  • 哪些網(wǎng)站做ip向小說神秘網(wǎng)站
  • 央視新聞seo的五個步驟
  • 尋找徐州網(wǎng)站開發(fā)企業(yè)網(wǎng)絡(luò)營銷青島
  • 深圳廣告公司前十強(qiáng)seo簡單速排名軟件
  • 單頁網(wǎng)站在線制作公司搜索seo
  • 做網(wǎng)站上哪買空間鄭州seo顧問外包公司
  • 書畫網(wǎng)站模板下載跨境電商seo什么意思
  • 網(wǎng)絡(luò)營銷的方法包括哪些重慶seo是什么
  • wordpress 子主題路由seo沒什么作用了
  • 素材網(wǎng)站源碼成品視頻直播軟件推薦哪個好一點
  • 如何仿造一個網(wǎng)站做廣州網(wǎng)絡(luò)廣告推廣公司
  • 企業(yè)網(wǎng)站 手機(jī)網(wǎng)站 app 微網(wǎng)站廣州網(wǎng)站建設(shè)系統(tǒng)
  • wordpress is_mobile上海關(guān)鍵詞排名優(yōu)化公司
  • 制作類網(wǎng)站seo人才招聘
  • 建站abc做的網(wǎng)站穩(wěn)定營銷方案包括哪些內(nèi)容
  • 購物平臺排行榜2020淄博seo培訓(xùn)
  • 貴州網(wǎng)站建設(shè)公司網(wǎng)絡(luò)營銷專業(yè)的就業(yè)方向
  • java 做網(wǎng)站 模板在哪可以下新聞 最新消息
  • 高校網(wǎng)站建設(shè)研究意義楓林seo工具
  • 做網(wǎng)站 寫文章怎樣加視頻深圳網(wǎng)絡(luò)推廣
  • 個門戶網(wǎng)站站長之家ip查詢工具
  • 網(wǎng)站二次開發(fā)是什么意思谷歌在線瀏覽器入口