《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 業界動態 > Ubuntu實現樹莓派交叉編譯

Ubuntu實現樹莓派交叉編譯

2015-09-18
關鍵詞: Ubuntu 編譯

  一、交叉編譯
  在一個平臺上生成另一個平臺上的可執行代碼。為什么要大費周折的進行交叉編譯呢?一句話:不得已而為之。有時是因為目的平臺上不允許或不能夠安裝所需要的編譯器,而又需要這個編譯器的某些特征;有時是因為目的平臺上的資源貧乏,無法運行所需要的編譯器;有時又是因為目的平臺還沒有建立,連操作系統都沒有,根本談不上運行什么編譯器。
  要進行交叉編譯,我們需要在主機平臺上安裝對應的交叉編譯工具鏈(cross compilation tool chain),然后用這個交叉編譯工具鏈編譯源代碼,最終生成可在目標平臺上運行的代碼。
  常見的交叉編譯例子如下:
  1、在Windows PC上,利用ADS(ARM 開發環境),使用armcc編譯器,則可編譯出針對ARM CPU的可執行代碼。
  2、在Linux PC上,利用arm-linux-gcc編譯器,可編譯出針對Linux ARM平臺的可執行代碼。
  3、在Windows PC上,利用cygwin環境,運行arm-elf-gcc編譯器,可編譯出針對ARM CPU的可執行代碼。
  二、名詞解釋
  Linux下的大多數軟件包都使用Autoconf/Automake工具自動生成Makefile,只要使用“./configure”,“make”,“make install”就可以把程序安裝到Linux系統中去了。編譯第三方源代碼時,可以看下工程中的readme和install文件,一般情況下都會寫編譯步驟。
  1、./configure 常用參數
  [--build]
  [--host]
  [--target]
  [--prefix]
  [--help]
  注意:host和--host不是一個意思,host是指宿主機,即編輯和編譯程序的平臺,是個名詞;--host是設置執行文件所運行的主機,是個動詞。
  >> ./configure: 用來生成對應的 Makefile;
  >> --build: 執行代碼編譯的主機,正常的話就是你的主機系統。若無指定使用host的值;
  >> --host: 編譯出來的二進制程序所執行的主機, 交叉編譯工具鏈的前綴。因為絕大多數是如果本機編譯就本機執行,所以這個值就等于build。但是交叉編譯的時候build和host需要設置不同值,用host指定運行主機,即host != build的時候編譯才是交叉編譯。若無指定將會運行`config.guess"來檢測;
  >> --prefix: 安裝目錄,比如 --prefix=/usr 意思是將該軟件安裝在 /usr 下面,執行文件就會安裝在 /usr/bin (而不是默認的 /usr/local/bin),資源文件就會安裝在 /usr/share(而不是默認的/usr/local/share);
  >> --help: 查看參數;
  >> --target: 這個參數比較特殊,表示需要處理的目標平臺名稱,主要在程序語言工具如編譯器和匯編器上下文中起作用,若無指定使用host的值。一般用來編譯工具,比如給arm開發板編譯一個可以處理mips程序的gcc,那么--target=mips;
  >>>> 舉例說明:編譯gcc
  >> ./configure --build=i386-linux --host=arm-linux --target=mipsel-linux --prefix=$(pwd)/_install
  用i386-linux的編譯器進行gcc的編譯,編譯出的gcc運行在arm-linux, 編譯結果存放到$(pwd)/_install路徑下,編譯出的gcc用來編譯能夠在mipsel-linux下運行的代碼。
  2、Makefile包含了一些基本的預先定義的操作:
  >>make: 根據Makefile編譯源代碼,連接,生成目標文件,可執行文件;
  >>make clean: 清除上次的make命令所產生的t文件(后綴為“.o”的文件)及可執行文件;
  >>make distclean: 類似make clean,但同時也將configure生成的文件全部刪除掉,包括Makefile;
  >>make test / make check: 檢查make,確保make沒有出錯,一般在make install之前執行;
  >>make install: 將編譯成功的可執行文件安裝到指定目錄中,一般為/usr/local/bin目錄;
  >>make dist: 產生發布軟件包文件(即distribution package)。這個命令將會將可執行文件及相關文件打包成一個tar.gz壓縮的文件用來作為發布軟件的軟件包。它會在當前目錄下生成一個名字類似“PACKAGE-VERSION.tar.gz”的文件。PACKAGE和VERSION,是我們在configure.in中定義的AM_INIT_AUTOMAKE(PACKAGE, VERSION);
  >>make distcheck: 生成發布軟件包并對其進行測試檢查,以確定發布包的正確性。這個操作將自動把壓縮包文件解開,然后執行configure命令,并且執行make,來確認編譯不出現錯誤,最后提示你軟件包已經準備好,可以發布了;
  三、交叉編譯源代碼
  1、環境
  Ubuntu
  2、樹莓派交叉編譯工具安裝
  step1. 下載樹莓派交叉編譯工具https://github.com/raspberrypi/tools
  step2. 將源碼放到各用戶都能share的文件夾下,如/usr/tools
  step3. 將交叉編譯工具的路徑加到環境變量中,為了以后啟動不用再設置,我加到了bashrc中
  1 $nano ~/.bashrc 2 #在文件的末尾加上: export PATH=$PATH:/usr/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin 3 $source .bashrc
  step4. 檢測是否安裝成功
  way1:
  $arm #雙tab
  顯示以下內容
  環信謝雅杰:Ubuntu實現樹莓派交叉編譯
  way2:
  $arm-linux-gnueabihf-gcc -v #能顯示正確信息 $arm-linux-gnueabihf-g++ -v #能顯示正確信息
  注意:交叉編譯時,如果出現arm-linux-gnueabihf-XXX找不到,確定arm-linux-gnueabihf-XXX -v 是否能輸出正確信息,如果能,可以切到root下進行編譯
  三、編譯源代碼
  1、在寫編譯腳本時,一定要確保編譯器寫的是交叉編譯的編譯器。比如比較常用的Makefile,
  1 demo: $(obj) 2 $(CXX) -o $@ $^ $(LDFLAGS)
  其中的CXX必須是arm-linux-gnueabihf-g++才能編譯出正確的在樹莓派上的可執行文件。
  2、編譯第三方庫
  如果你想設置全局的CC和CXX變量,在每次打開一個新的Terminal時,輸入以下命令:
  1 $export CC=arm-linux-gnueabihf-gcc 2 $export CXX=arm-linux-gnueabihf-g++
  其他的全局變量同上。
  以下列幾個常用的第三方庫交叉編譯步驟
  1>> sqlite3   step1: make clean
  step2: ./configure --host=arm-linux-gnueabihf --prefix=/usr/local/tools/sqlite3
  step3: make
  step4: make install
  2>>curl http://curl.haxx.se/download.html curl-7.43.0.tar.gz
  step1: make clean
  step2: ./configure --host=arm-linux-gnueabihf --prefix=/usr/local/tools/curl
  step3: make
  step4: make install
  step1: ./config no-asm shared --prefix=/usr/local/tools/openssl
  step2: a、修改Makefile CC=arm-linux-gnueabihf-gcc
  b、找到有-m64的地方,將-m64刪除。
  step3: make

本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
亚洲一区二区三区四区中文| 99成人在线| 亚洲精品日韩一| 伊人色综合久久天天| 国产亚洲毛片在线| 国产精品亚洲产品| 国产精品一级二级三级| 国产精品精品视频| 国产精品高清在线| 国产精品高清在线| 国产精品欧美一区二区三区奶水| 欧美三级在线视频| 欧美私人网站| 国产精品一区二区三区久久久| 欧美三日本三级少妇三99| 欧美日韩一区三区| 欧美日韩午夜视频在线观看| 欧美日韩精品在线| 欧美午夜在线| 国产精品久久久久久久久久直播| 国产精品免费一区二区三区在线观看 | 欧美网站大全在线观看| 欧美日韩妖精视频| 欧美三级乱人伦电影| 国产精品久久久久久久久搜平片| 国产精品家庭影院| 国产情人综合久久777777| 国产日韩久久| 精品成人乱色一区二区| 亚洲激情成人网| 亚洲最快最全在线视频| 亚洲欧洲av一区二区| 中文一区二区| 亚洲欧美一区二区三区极速播放| 亚洲欧美综合国产精品一区| 欧美亚洲一区| 久久精品国产91精品亚洲| 久久五月激情| 欧美激情第4页| 小黄鸭精品密入口导航| 欧美一级视频精品观看| 久久男人av资源网站| 欧美韩日一区| 欧美亚男人的天堂| 国产午夜精品全部视频在线播放| 国内外成人免费激情在线视频| 亚洲电影自拍| 亚洲一区二区三区精品在线| 久久成人免费网| 一本色道久久综合狠狠躁篇的优点 | 欧美在线视频在线播放完整版免费观看| 久久精品视频一| 欧美激情精品久久久久久黑人| 欧美日韩亚洲高清| 国产一区二区在线免费观看 | 久久一区亚洲| 欧美日韩中文在线| 国产一区二区激情| 亚洲精品日本| 欧美亚洲视频一区二区| 日韩亚洲在线| 欧美在线一二三四区| 欧美国产精品va在线观看| 国产精品欧美精品| 亚洲国产精品高清久久久| 午夜精彩视频在线观看不卡| 亚洲精品久久久久久下一站| 亚洲制服丝袜在线| 欧美国产精品劲爆| 国产视频精品va久久久久久| 亚洲精品在线观| 久久国产精品亚洲va麻豆| 亚洲一区三区在线观看| 免费成人av在线看| 国产欧美精品一区| 一区二区不卡在线视频 午夜欧美不卡在| 欧美一级久久久久久久大片| 99热这里只有精品8| 久久亚裔精品欧美| 国产精品日韩电影| 亚洲免费观看| 亚洲福利av| 性欧美videos另类喷潮| 欧美激情黄色片| 狠狠色2019综合网| 亚洲欧美在线x视频| 中国女人久久久| 欧美成人按摩| 国产综合色在线视频区| 亚洲午夜在线视频| 9人人澡人人爽人人精品| 蜜桃久久精品乱码一区二区| 国产亚洲高清视频| 亚洲免费在线播放| 亚洲专区在线| 欧美日韩在线第一页| 亚洲激情在线观看| 最新中文字幕一区二区三区| 久久国产精品高清| 国产精品每日更新在线播放网址| 日韩一本二本av| 亚洲毛片在线免费观看| 裸体歌舞表演一区二区| 国产亚洲毛片在线| 欧美一区2区三区4区公司二百| 亚洲综合精品一区二区| 欧美日一区二区在线观看| 亚洲另类自拍| 99这里只有久久精品视频| 欧美国产高清| 亚洲激情不卡| 亚洲伦伦在线| 欧美激情第1页| 亚洲精品久久在线| 99精品国产高清一区二区| 欧美成人福利视频| 亚洲国产精品久久久久秋霞不卡 | 夜夜嗨av一区二区三区网页| 欧美大片国产精品| 在线观看精品一区| 91久久精品一区二区别| 老司机免费视频一区二区三区| 国产亚洲毛片在线| 久久狠狠亚洲综合| 久久精品成人| 红桃视频国产一区| 亚洲国产精品一区制服丝袜| 久久免费高清视频| 狠狠色狠狠色综合系列| 亚洲高清免费视频| 欧美黄色免费| 亚洲乱码一区二区| 亚洲一区国产精品| 国产精品视频自拍| 欧美一区二区三区另类| 久久午夜视频| 亚洲激情精品| 亚洲视频碰碰| 国产女主播在线一区二区| 欧美一区日韩一区| 免费久久99精品国产自| 亚洲国产日韩综合一区| 亚洲少妇一区| 国产日产欧产精品推荐色| 亚洲第一精品夜夜躁人人爽| 亚洲高清在线| 美女免费视频一区| 亚洲毛片在线看| 亚洲欧美日韩国产成人| 国产精品视频自拍| 亚洲国产精品欧美一二99| 欧美国产一区视频在线观看| 99精品欧美| 欧美一区二区三区久久精品茉莉花 | 亚洲一区视频| 久久久久综合网| 亚洲国产成人午夜在线一区| 亚洲视频欧洲视频| 国产伦一区二区三区色一情| 欧美专区在线观看| 欧美理论电影在线观看| 亚洲一区二区不卡免费| 久久久久久久久久久久久9999| 亚洲国产三级网| 销魂美女一区二区三区视频在线| 黄色亚洲免费| 亚洲素人在线| 国外成人在线视频| 亚洲图片欧洲图片av| 国产欧美日韩一区| 日韩网站免费观看| 国产欧美一区在线| 亚洲精选中文字幕| 国产日韩在线播放| 一二三四社区欧美黄| 国产免费观看久久| 99亚洲精品| 国内精品视频666| 亚洲性视频h| 一区二区在线观看视频在线观看| 亚洲午夜高清视频| 在线观看日韩专区| 香蕉久久久久久久av网站| 亚洲国产精品嫩草影院| 欧美一级片一区| 亚洲免费大片| 毛片基地黄久久久久久天堂| 亚洲一区视频在线| 欧美日韩情趣电影| 亚洲国产精品精华液2区45| 国产精品美女在线观看| 亚洲精品在线看| 国产一区亚洲| 亚洲欧美国产制服动漫| 亚洲黄色精品| 老**午夜毛片一区二区三区| 亚洲摸下面视频| 欧美日韩一级大片网址| 91久久精品一区二区别| 国产亚洲精品自拍|