modbus交叉編譯

2021-09-27 07:30:54 字數 1347 閱讀 1677

目的:在ubuntu16.04上,對modbus進行交叉編譯,使編譯完成後的檔案放在專案資料夾中後,專案通過交叉編譯可以實現在arm板上執行。

然後將該檔案複製到虛擬機器ubuntu系統中,解壓縮(tar xzvf libmodbus-3.1.4.tar.gz)。

然後進入解壓後的資料夾,執行 ./autogen.sh 生成 configure 指令碼。

這一步我這裡報錯:

./autogen.sh: 2:./autogen.sh : autoreconf:not found

running autoreconf failed

解決方法:

sudo apt-get install autoconf

sudo apt-get install automake

sudo apt-get install libtool

再次執行 ./autogen.sh 就可以成功。

然後在該目錄下進行編譯

./configure --host=aarch64-linux-gnu --prefix=/home/hu/libmodbus-master-linux
aarch64-linux-gnu 是我用的編譯器,prefix後面跟的是編譯生成檔案放置的目錄。

執行後會出現確認資訊,如果是對的就 make & make install;如果不對就重新設定。

完成後到剛才設定的目錄下,就可以看到生成的檔案。將其拷貝到相應的專案目錄中進行編譯。

編譯報錯,提示

undefined reference to `rpl_malloc』

網上說是因為交叉編譯時autotools認為我的工具鏈中不包含malloc,然後自作主張替換成了rpl_malloc。

我的解決辦法是將libmodbus資料夾中的 configure 檔案開啟,從裡面刪除

$as_echo 「#define malloc rpl_malloc」 >>confdefs.h

這一行(這個檔案中有很多字,我將它複製到了word中然後乙個乙個查詢,找得很費勁,還好成功了)。然後把剛才生成的東西刪了,重新從 ./configure 開始執行,再將它們拷貝到專案資料夾裡面,再次編譯,編譯成功。

二:下面的工作就是將編譯好的可執行檔案放到共享目錄中,在arm板上執行,這時又會出現乙個主要問題。提示找不到動態鏈結庫 libmodbus.so.5 。

根據我目前掌握的知識,這是由於arm板上程式執行時,會自動去 /usr/bin 或 /bin 中(這兩個裡面我都拷貝了,具體是哪乙個起了作用我也不知道)尋找動態鏈結庫,如果程式用到了但這個目錄下面沒有就會報錯。解決方法是將該檔案通過nfs共享資料夾拷貝到相應的資料夾下,再次執行,最終成功。

編譯 交叉編譯

交叉編譯含義 是指在乙個平台上生成另乙個平台上的可執行 同乙個體系結構可以執行不同的作業系統,同樣乙個作業系統也可以在不同的體系結構上執行 例 常說的x86 linux平台 指inter x86體系結構及linux for x86作業系統 x86 winnt平台 指inter x86體系結構及win...

交叉編譯(2) 交叉編譯鏈

什麼是交叉編譯鏈 明白了什麼是交叉編譯,那我們來看看什麼是交叉編譯鏈。首先編譯過程是按照不同的子功能,依照先後順序組成的乙個複雜的流程,如下圖 那麼編譯過程包括了預處理 編譯 彙編 鏈結等功能。既然有不同的子功能,那每個子功能都是乙個單獨的工具來實現,它們合在一起形成了乙個完整的工具集。同時編譯過程...

交叉編譯 Go 交叉編譯 跨平台編譯

golang 支援交叉編譯,在乙個平台上生成另乙個平台的可執行程式 cgo enabled 0 goos linux goarch amd64 go build main.go cgo enabled 0 goos windows goarch amd64 go build main.go cgo ...