日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

树莓派:交叉编译,以及带wiringPi库的如何交叉编译

發布時間:2025/4/5 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 树莓派:交叉编译,以及带wiringPi库的如何交叉编译 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、交叉編譯是什么?為什么要交叉編譯?

????????交叉編譯? 是在一個平臺上生成另一個平臺上的可執行代碼

????????????編譯:在一個平臺上生成該平臺上的可執行代碼?????

???????????????????????

===================交叉編譯是什么?====================

? ? ? ? ? ? ? ? 我們在windows上面編寫c51代碼,并編譯成可執行代碼,如xx.hex,

? ? ? ? ? ? ? ? 是在c51上面運行,不是在windows上面運行?

?????????

????????????????我們在ubuntu 上面編寫樹莓派代碼,并編譯成可執行代碼,如a.out,

? ? ? ? ? ? ? ? 是在樹莓派上面運行,不是在 ubuntu linux上面運行

????????????????????????c51? 交叉編譯發生在keil(集成環境環境上面)

??????????????

================為什么要交叉編譯?====================

? ? ? ? ? ????????平臺上不允許或不能夠安裝我們所需要的編譯器,比如c51

????????????????1、因為目的平臺上的資源匱乏,無法運行我們所需要的編譯器

? ? ? ? ? ? ? ? ? ? ? ? 2、樹莓派是不是就不需要交叉編譯?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 錯。 也要。樹莓派有時又是因為目的平臺還沒有建立,連操作系統都沒有,根本談不上運行什么編譯器!

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 操作系統也是代碼,也要編譯!!!

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 平臺運行至少需要兩樣東西:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?bootloader(啟動引導代碼) ,以及操作系統核心

? ??

?宿主機(host) :編輯和編譯程序的平臺,一般是基于x86的pc機,通常也被稱為主機

目標機(target):用戶開發的系統,通常都是非x86平臺。host 編譯得到的可執行代碼在target上運行? ? ? ? ? ? ?

簡單來說:我們學習用的pc 機是宿主機,樹莓派是目標機?

===================交叉編譯需要用到工具:===============

? ? ? ? ? ? ? ? 交叉編譯器、交叉編譯工具鏈

======================相關代碼=======================

代碼的編輯

?代碼的編譯

?編譯出來的代碼./a.out可以運行

==============2、交叉編譯工具鏈的安裝===================

(目標機是樹莓派,用的工具鏈就是樹莓派的)

https://github.com/raspberrypi/

?在這個網址安裝

?他的界面是打開是這樣的

?

?點擊這里,tools就是工具鏈的意思

?進去了是這個樣子的

?然后我們點擊克隆

?再點擊

?點擊最下面的

下載完就這樣啦

?解壓

unzip tools-master.zip

2.1臨時有效=======================================

? ? ? ? PATH環境變量

????????????????export??PATH=/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/CLC/lessonPI/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin

? ? ? ? ? ? ? ?從windows拷貝工作目錄

? ? ? ? ? ? ? ? ? ? ? ? 用filezilla

???? ? ? ? ? ? ? ?解壓

? ? ? ? ? ? ? ? ? ? ? ? unzip tools-master.zip? ? ? ?

? ? ?
? ? ? ? ?pwd獲得路徑

????????

? ? ? ? echo $PATH 獲得當前環境變量的值

2.2永久有效============================================

? ? ? ? 修改工作目錄下的.bashrc? ?隱藏文件,配置命令終端的

????????????????????????????????vi /home/CLC/.bashrc?
?

? ? ? ? ? ? ? ? ? ? ? ?在文件 最后一行加入:

????????????????export??PATH=/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/CLC/lessonPI/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin

? ? ? ? ? ? ? ? 加載配置文件,馬上生效配置

????????????????source /home/CLC/.bashrc?

我們打開虛擬機,新建一個文件夾

然后用filezilla傳輸

?再把它放到想要的地方

然后用這個指令解壓

然后用這個指令解壓

然后用這個指令解壓

解壓完成

打開看看里面都有什么?

?這有很多目錄,我們需要的在哪里呢?

?然后在bin 下面綠色的都是可執行文件

我們需要用到的是這個軟鏈接

它實際用到的是后面的東西?

我們取了一個名字指向4.8.3

這個軟鏈接是不占內存的,只是一個符號,指向4.8.3

這兩個是類似的

只是gcc -v? 編譯出來的東西在本電腦上面運行

如果我們要在樹莓派上編譯需要./arm-linux-gnueabihf-gcc -v

?感覺到敲這么多指令是不是很麻煩?怎么辦呢?

我們能不能像gcc 一樣直接識別到呢?

這涉及到環境變量

如何顯示當下的環境變量?

?那么如何配環境變量呢?(臨時環境變量)====================

pwd顯示當面目錄

?export 是配置環境的意思

?然后我們直接回到工作目錄

?

?現在就可以識別啦

?環境變量的臨時配置方式:

你在其他的窗口,不認識

?那么如何配環境變量呢?(永久有效環境變量)=================

?修改隱藏文件

?

?然后再最后一行加入

export??PATH=/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/CLC/lessonPI/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin

?然后讓他生效

?我們現在打開一個新的窗口試試

可以認識

而且里面的版本號 4.8.3

3、交叉編譯服務客戶端==================================

交叉編譯:

? ? ? ? 檢查下交叉編譯工具對不對:

?????????????????????????arm-linux-gnueabihf-gcc -v

?????????????????????????4.8.3?

????????????????如何交叉編譯?

????????????????arm-linux-gnueabihf-gcc xxx.c -o xxxx

? ? ? ? ? ? ? ? 如何把編譯生成的可執行文件下載到開發板:

????????????????????????scp test_2 pi@192.168.32.209:/home/pi
????????????????

? ? ? ? ? ? ? ? ? ? ? ? scp 是指令

? ? ? ? ? ? ? ? ? ? ? ? test_2 是文件名

? ? ? ? ? ? ? ? ? ? ? ? 開發板用戶名@開發板地址:開發板的絕對路徑

=========================================================================

新建一個test.c的文件

?里面的內容

?給他命名test_1

file 用來查看文件的屬性

executable,可執行的意思

x86-84,只能運行在x86的64位電腦上

你把這個test_1,放在樹莓派上是跑不動的

?那么如何把test.c放在樹莓派底下運行呢?

?我在再來看一下test_2的屬性

可執行的,可以運行在ARM平臺的

我們在linux平臺上先運行一下兩者

test_2不能解析,不能運行,因為我們編出來的要放在樹莓怕下面跑

交叉編譯的作用就產生啦,在x86平臺上編譯,在樹莓派上面使用

?那如何把他拷貝到樹莓派下面呢?

?那樹莓派是否拿到這個代碼了呢?

是的

那我們如何運行呢?

?那我么如果把test_1也放到樹莓派下能運行嗎?

?運行不了,格式錯誤

如果想要上位機編譯的代碼,能在樹莓派上面運行,

前提是交叉編譯過,交叉編譯的工具鏈要對

4、帶wiringPi庫的交叉編譯如何讓進行=======================

?1、正常我們先要交叉編譯wiringPi庫,編譯出的庫適合樹莓派,這時候交叉編譯可執行程序的時候,鏈接庫的格式也是正確的。

2、通過 -I? ? -L? 來指定

?因為鏈接庫的格式不對,是宿主機的平臺,出現以先下錯誤

? ? ? ? ? ? ? ? arm-linux-gnueabihf-gcc demo2.c -I /home/CLC/lessonPI/WiringPi/wiringPi -lwiringPi
?

?/home/CLC/lessonPI/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/../lib/gcc/arm-linux-gnueabihf/4.8.3/../../../../arm-linux-gnueabihf/bin/ld: cannot find -lwiringPi
collect2: error: ld returned 1 exit status

如何解決呢?

把樹莓派的wiringPI庫拿上來用

樹莓派的wiringPi庫在哪呢?‘

cd /usr/lib/

======================================================================

軟鏈接:

參考文章:

http://www.cnblogs.com/zhangna1998517/p/11347364.html

ln -s 是linux中一個非常重要命令,一定要熟悉。它的功能是為某一個文件在另外一個位置建立一個同不的鏈接,這個命令最常用的參數是-s, 具體用法是:ln -s 源文件 目標文件。 當 我們需要在不同的目錄,用到相同的文件時,我們不需要在每一個需要的目錄下都放一個必須相同的文件,我們只要在某個固定的目錄,放上該文件,然后在其它的 目錄下 用ln命令鏈接 (link)它就可以,不必重復的占用磁盤空間。例如:ln -s /bin/less /usr/local/bin/less -s 是代號(symbolic)的意思。 這 里有兩點要注意:第一,ln命令會保持每一處鏈接文件的同步性,也就是說,不論你改動了哪一處,其它的文件都會發生相同的變化;第二,ln的鏈接又軟鏈接 和硬鏈接 兩種,軟鏈接就是 ln -s ** **,它只會在你選定的位置上生成一個文件的鏡像,不會占用磁盤空間,硬鏈接ln ** **,沒有參數-s, 它會在你選定的位置上生成一個和源文件大小相同的文件,無論是軟鏈接還 是硬鏈接,文件都保持同步變化。

【硬連接】
硬連接指通過索引節點來進行連接。在Linux的文件系統中,保存在磁盤分區中的文件不管是什么類型都給它分配一個編號,稱為索引節點號(Inode Index)。在Linux中,多個文件名指向同一索引節點是存在的。一般這種連接就是硬連接。硬連接的作用是允許一個文件擁有多個有效路徑名,這樣用戶就可以建立硬連接到重要文件,以防止“誤刪”的功能。其原因如上所述,因為對應該目錄的索引節點有一個以上的連接。只刪除一個連接并不影響索引節點本身和其它的連接,只有當最后一個連接被刪除后,文件的數據塊及目錄的連接才會被釋放。也就是說,文件真正刪除的條件是與之相關的所有硬連接文件均被刪除。

【軟連接】
另外一種連接稱之為符號連接(Symbolic Link),也叫軟連接。軟鏈接文件有類似于Windows的快捷方式。它實際上是一個特殊的文件。在符號連接中,文件實際上是一個文本文件,其中包含的有另一文件的位置信息。

======================================================================

軟鏈接概念:

1.軟鏈接文件有類似windows的快捷方式。

2.在符號連接中,文件實際上是一個文本文件。其中包含的有另一文件的位置信息。

3.你選定的位置上生成一個文件的鏡像,不會占用磁盤空間

如何生成

? ? ?ln -s libwiringPiDev.so.2.50 libwiringPiDev.so
?

? ? ?????????ln? ?指令

? ? ? ? ? ???-s? ?參數

???????????????? libwiringPiDev.so.2.50要被鏈接的文件

????????????????ibwiringPiDev.so 軟鏈接文件名字

硬鏈接概念

?????????????????ln? libwiringPiDev.so.2.50? libwiringPiDev.so

? ? ? ? ? ? ? ? 1、他會在你選定的位置上生成一個和源文件大小相同的文件

===========相關代碼================================

在我們之前寫的demo2.c里面

?他的頭文件包含wiringPi.h

?我們如果直接gcc 編譯的話會出現錯誤,顯示不認識這些函數

?必須得鏈接上wiringPI的庫才可以

?如果在上位機進行交叉編譯的時候,我們并沒有wiringPI這個東西,如何辦呢?

下載代碼,在用filezilla傳輸

解壓以后傳輸到Linux下面

傳輸完以后

記得解壓完,看看里面的兩個東西

?然后我們./build輸入一下試試

發現全是白的運行不了,必須是綠的才能運行,這時候

直接用chmod 就行啦

chmod +x 文件名?

?根據README.TXT和INSTALL

?我們先./build

超級用戶需要輸入密碼

然后告訴你安裝完畢

然后我們看看他說的是不是在/usrlocal/lib/下面有

確實有這些東西,但是這些東西是不能用的

我們做個實驗

把樹莓派的demo2.c傳輸到linux 上面

用scp

記得Linux網絡改成橋接模式

?然后我們看看linux 有沒有傳過來的demo2.c

?然后我們編譯它

發現頭文件不認識

?如何辦呢?

首先找到頭文件

發現都運行不了?

?然后給他加上權限

解決方法

你會發現提示不一樣了

剛才是這個文件找不到,現在是文件找到了,但是有問題

他的問題,跟我們在樹莓派下面運行demo2.c 一樣的

不認識這些函數

?如何解決呢?

?同樣的我們在linux 下面試一下

報錯了

?因為我們的鏈是跑到去鏈他的

ls /usr/local/lib/

?我們去看一下他的文件屬性

他是個軟鏈接看不了

?要看他真正鏈的東西

這東西是x86的

arm-linux-gnueabihf-gcc是交叉編譯工具鏈,編譯的東西要適合樹莓派的,你用的window的東西,用的是x86的東西,平臺不兼容,你的編譯器不認識wiringPi這個庫

?它編譯出來的庫都是適合x86平臺的不是樹莓派平臺的

grep gcc * -nir
grep? ?在所有的文件中匹配gcc的字段

* ????????代表所有的文件

n???????? 顯示行號(常規文件顯示行號)

i ?????????是不區分大小寫

r? ? ? ? 是遞歸,一個個目錄的找進去

?

給history 加一個管道 找數據源

敲過的指令和demo2有關的就過濾出來了

?樹莓派的wiringPi庫在哪呢?

?看見鍵號了嗎?

->是軟鏈接的意思,真正用到的庫是.2.50

?然后我們可以scp把需要的庫傳到linux上面

傳的沒有Dev的那個

?看看linux是否拿到手了

這個庫到手了

沒有Dev

?那我們能不能把軟鏈接也拿過來

?看看樹莓派拿到軟鏈接了嗎?

是的

軟連接消失了.so 不會指向.so.2.50?

?

?這種方式不行,我們要自己創建軟鏈接

如何生成軟鏈接?

ln -s 輸入你要鏈接的文件

?然后我們ls -l 查看一下

有一個箭頭箭過來,說明創建成功

記得創建一個不帶Dev的

?軟鏈接已經創建成功,可以用了

. L 用當前文件庫

記得看看路徑對不對

記得看看鏈接的庫,我傳輸錯了,好久才找到原因,對慘痛教訓,看見那個屁股帶Dev的了嗎?那個就是傳輸錯的)

?然后給他個名字

然后把他傳到樹莓派下面

?

?然后我們去樹莓派下面看一眼

?可以正常運行

?我們去代碼看看,回憶回憶

?功能是吧gpio繼電器7的端口,輸入1 的時候是低電平,輸入0的時候是高電平

?然后我們看看初始的時候

?端口7是1

?當我們輸入0的時候

?當我們輸入1的時候

端口7就變成了0

總結

以上是生活随笔為你收集整理的树莓派:交叉编译,以及带wiringPi库的如何交叉编译的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 大陆日韩欧美 | 成 年 人 黄 色 大 片大 全 | 中文字幕乱码人妻一区二区三区 | 一区二区高清在线 | 在线观看污污视频 | 成人h动漫精品一区 | 国产伦乱| 久久久久国产精品人妻 | 国产一卡二卡 | 国产福利免费在线观看 | 日韩av网站在线观看 | 亚洲精品视屏 | 97日日夜夜 | 国产 中文 字幕 日韩 在线 | 禁止18在线观看 | 激情视频激情小说 | 日韩在线播放一区 | 亚洲精品久久一区二区三区777 | 狂野欧美性猛交xxⅹ李丽珍 | 国产精品第72页 | 成人亚洲网站 | 国产在线h| 国产精品欧美久久久久久 | 影音先锋中文字幕资源 | 国产999视频 | 国内精品视频在线 | 国产一级免费av | 国产精品一区二区在线观看 | 成人免费黄色小视频 | 国产女主播在线播放 | 亚洲精品国产精品国自产网站 | 国产亚洲欧美日韩高清 | 日本一区二区三区免费电影 | 国产精品久久久久久网站 | 玉米地疯狂的吸允她的奶视频 | 欧美午夜性生活 | 欧美99视频 | 黄色大片91 | 久久亚洲精品小早川怜子 | 日韩在线国产精品 | 日韩欧美第一区 | 息与子五十路翔田千里 | 少妇影院在线观看 | 日本亲子乱子伦xxxx | 国产精品字幕 | 成人免费视频国产在线观看 | 星空大象在线观看免费播放 | 制服丝袜av在线 | 欧美一级黑人 | 日韩在线1 | 一本不卡| 国产真人无码作爱视频免费 | 亚洲视频精品一区 | 国产一区二区在线免费观看视频 | 亚洲熟妇av一区二区三区漫画 | 欧美成人综合一区 | 6080午夜 | 嫩草精品| 欧美国产日韩精品 | 欧美丰满美乳xxⅹ高潮www | 日本美女日批视频 | 欧美激情久久久久久久 | 国产精品久久久久久久专区 | 国产麻豆午夜三级精品 | 日本xxxx免费 | 欧美视频免费看欧美视频 | 成年人免费av | 男人在线视频 | 亚洲一区中文字幕 | 国产一级二级三级视频 | 国产成人手机视频 | 欧美精品黄色 | a毛片在线观看 | 日韩和欧美的一区二区 | 久久99精品久久久久子伦 | 免费网站黄色 | 午夜激情影院 | 亚洲国产图片 | 久久亚洲一区二区三区四区 | 国产五月 | 日韩不卡免费视频 | 免费看欧美片 | 久久久女人 | 久草精品视频在线观看 | 欧美第一页在线 | 精品国产一区二区三区久久久蜜月 | 国产欧美日韩综合 | 亚洲成人精品一区二区三区 | 久久免费精品 | 亚洲最大成人在线视频 | 中国zzji女人高潮免费 | 黄色片网站视频 | 黄色小视频在线播放 | 欧美性插插 | 成人自拍av | 国产又黄又粗又猛又爽 | 少妇肥臀大白屁股高清 | 黄色高清在线观看 | 台湾佬美性中文娱乐网 |