當前位置:首頁 » 編程軟體 » 編譯鏈方案

編譯鏈方案

發布時間: 2025-03-25 03:55:38

⑴ AT91SAM9G45使用什麼編譯

簡答:


1.「編譯鏈」


你說的:編譯鏈


據我所知:是不妥的叫法


正確的叫法是:交叉工具鏈


也常叫做:交叉編譯器



2.關於交叉工具鏈/交叉編譯器


首先,你需要先搞懂,什麼是交叉工具鏈


詳見:


交叉編譯詳解



3.給定一個CPU/MCU/SoC,如何確定其所用的交叉工具鏈?


主要邏輯是:


確定該CPU/MCU/SoC所用的CPU內核


然後根據對應的CPU內核,去找其對應的,可用的交叉工具鏈。



針對你這里的:AT91SAM9G45


隨便去用google搜了下:


AT91SAM9G45


而找到:


AT91SAM9G45 – ARM926-based eMPU


可知:


是基於ARM926的內核的。


所以:


去找,支持ARM926內核的,交叉工具鏈,即可。



進一步的,通過:


ARM926 處理器


知道了:


ARM926的內核架構是ARMv5TEJ


所以:


去找,


支持ARMv5的交叉編譯器

或者是支持ARMv5TEJ的交叉編譯器

也就支持了ARM926

也就支持了你的:AT91SAM9G45



4.在哪裡可以得到,下載到所需要的交叉工具鏈?


關於此問題,之前教程已經解釋的足夠詳細了。


詳見:


如何得到交叉編譯器



對於你此處的,所需要的:


支持ARM926內核的,交叉工具鏈


去幫你找找:


找到一些:


找到的支持ARMv5或ARMv5TEJ或ARM926或AT91SAM9G45的交叉編譯器


1.這里:


Distcc Cross-Compiling


也有你要的,直接編譯好的,你可以直接下載試用的:


(支持了armv5的arm-unknown-linux-gnueabi)

ARMv5tesoft
http://archlinuxarm.org/builder/xtools/x-tools.tar.xz


詳解:

專門寫帖子:

【問題解答】AT91SAM9G45使用什麼編譯鏈?

給你極其詳盡的解釋:

原理,邏輯,如何找,怎麼找,並且給你找了不止一個。


註:這里不能貼地址,自己google搜標題即可。

⑵ 如何使用自己的makefile編譯android ndk項目

android ndk提供了一套自己的makefile管理方式,要將源碼項目移植到android平台,需要按照android的makefile規則編寫makefile,還要按android的規則部署源碼目錄,對一個有自己的makefile管理方法的大型項目來說,只是做一下makefile遷移工作就是一件很麻煩的事。
其實android ndk上的編譯說到底也就是交叉編譯,只要配置好交叉編譯工具鏈,使用原有的makefile也是可以編譯出在android運行的c、c++程序的。
以android-ndk-r4-crystax的ndk版本為例:
編譯器路徑 android-ndk-r4-crystax/build/prebuilt/linux-x86/arm-eabi-4.4.0/bin
名稱前綴 arm-eabi-
頭文件目錄 android-ndk-r4-crystax/build/platforms/android-3/arch-arm/usr/include
庫文件目錄 android-ndk-r4-crystax/build/platforms/android-3/arch-arm/usr/lib
你可以試一下上面的配置,如果編譯鏈接都沒有問題,可以adb push到android設備上運行看看,什麼結果?
有點崩潰,根本運行不起來,你也許想試試看android自帶的ndk例子,確實是能夠運行的,問題在哪兒呢?
只是正確配置了編譯器、頭文件、庫文件還不夠,還需要配置編譯、鏈接的參數,android例子中編譯鏈接的參數是什麼呢?你也許想深究一下android的makefile,可是不久你會發現那是更崩潰的事情,裡面用了很多的make腳本函數。其實android的makefile是可以把執行的詳細命令輸出來的,只要make的時候加上V=1即可。可以看到確實帶了很多參數
編譯參數:
-fpic
-mthumb-interwork
-ffunction-sections
-funwind-tables
-fstack-protector
-fno-short-enums
-Wno-psabi
-march=armv5te
-mtune=xscale
-msoft-float
-mthumb
-fomit-frame-pointer
-fno-strict-aliasing
-finline-limit=64
-Wa,--noexecstack
-D__ARM_ARCH_5__
-D__ARM_ARCH_5T__
-D__ARM_ARCH_5E__
-D__ARM_ARCH_5TE__
-DANDROID
鏈接參數:

-nostdlib
-Bdynamic
-Wl,-dynamic-linker,/system/bin/linker
-Wl,--gc-sections
-Wl,-z,noreloc
-Wl,--no-undefined
-Wl,-z,noexecstack
-L$(PLATFORM_LIBRARY_DIRECTORYS)
crtbegin_static.o
crtend_android.o
這其中鏈接參數中的-Wl,-dynamic-linker,/system/bin/linker、crtbegin_static.o、crtend_android.o是最關鍵的,android使用了自己的進程載入器,並且自定義了c運行時的啟動結束。難怪先前編譯的進程啟動不了。

熱點內容
反編譯obj 發布:2025-03-26 20:47:55 瀏覽:628
打開ftp資源管理器停止工作 發布:2025-03-26 20:46:54 瀏覽:750
C語言鏈表插入和刪除 發布:2025-03-26 20:45:47 瀏覽:452
手機什麼配置才能流暢吃雞 發布:2025-03-26 20:45:47 瀏覽:18
編譯與解析 發布:2025-03-26 20:28:48 瀏覽:98
社科外文資料庫 發布:2025-03-26 20:26:12 瀏覽:839
雅閣最低配的是什麼配置 發布:2025-03-26 20:09:37 瀏覽:27
安卓查看資料庫 發布:2025-03-26 19:52:13 瀏覽:131
最好加密狗 發布:2025-03-26 19:51:26 瀏覽:482
c編譯器能跑c代碼嗎 發布:2025-03-26 19:49:29 瀏覽:761