Android開發實踐:Android交叉編譯工具鏈的使用

來源:互聯網
上載者:User

標籤:ndk   工具鏈   編譯   makefile   

前面2篇文章分別介紹了Android NDK編譯的命令列參數,以及如何在任意目錄使用Android.mk來編譯本地c/c++代碼,Andriod.mk和ndk-build只不過是Android官方提供了一套封裝過的Android交叉編譯環境而已,其實,你可以不用它,而直接通過傳統的Makefile檔案來編譯你的c/c++代碼的,本文即介紹如何直接通過傳統的Makefile檔案來編譯可用於Android平台的庫檔案。


經常搞嵌入式開發的朋友對於交叉編譯環境應該並不陌生,說白了,就是一組運行在x86 PC機的編譯工具,可以讓你在PC機上編譯出目標平台(例如ARM)可識別的二進位檔案。Android平台也提供了這樣的交叉編譯工具鏈,就放在Android的NDK開發包的toolchains目錄下,因此,我們的Makefile檔案中,只需給出相應的編譯工具即可。


廢話就先說到這,直接上例子,我們目標是把下面這個math.c檔案編譯成一個靜態庫檔案:


#include <stdio.h>int add( int a , int b ) {    return a+b;}


你需要編寫一個Makefile檔案,這裡假設你的Android ndk被安裝在 /opt/android/ndk 目錄下,當然,你可以根據自己的實際情況修改Makefile中相關路徑的定義,Makefile檔案樣本如下:


# Makefile Written by ticktick# Show how to cross-compile c/c++ code for android platform.PHONY: cleanNDKROOT=/opt/android/ndkPLATFORM=$(NDKROOT)/platforms/android-14/arch-armCROSS_COMPILE=$(NDKROOT)/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/arm-linux-androideabi-CC=$(CROSS_COMPILE)gccAR=$(CROSS_COMPILE)arLD=$(CROSS_COMPILE)ldCFLAGS = -I$(PWD) -I$(PLATFORM)/usr/include -Wall -O2 -fPIC -DANDROID -DHAVE_PTHREAD -mfpu=neon -mfloat-abi=softfpLDFLAGS =TARGET = libmath.aSRCS = $(wildcard *.c)OBJS = $(SRCS:.c=.o)all: $(OBJS)        $(AR) -rc $(TARGET) $(OBJS)clean:        rm -f *.o *.a *.so

這裡不講Makefile檔案的基本原理,只說明一下針對Android環境的Makefile檔案編寫的注意事項。


(1) CROSS_COMPILE


必須正確給出Android NDK編譯工具鏈的路徑,當在目錄中執行make命令的時候,編譯系統會根據 CROSS_COMPILE 首碼尋找對應的編譯命令。


(2) -I$(PLATFORM)/usr/include


由於Android平台沒有使用傳統的c語言庫libc,而是自己編寫了一套更加高效更適合嵌入式平台的c語言庫,所以系統標頭檔目錄不能再使用預設的路徑,必須直到Android平台的標頭檔目錄


(3) -Wall -O2 -fPIC -DANDROID -DHAVE_PTHREAD -mfpu=neon -mfloat-abi=softfp


這些參數的意義網上基本上都有介紹,我就不一一解釋了,並不都是必須添加的,但比較常用。


編譯方法:


寫好makefile檔案,並且儲存之後,就可以直接在目前的目錄下執行make命令,編譯完成後,目前的目錄下會產生 libmath.a ,即可直接拿到Android的jni工程中和使用了。


關於如何直接使用Makefile檔案交叉編譯Android平台的c/c++代碼就介紹到這裡了,有任何疑問歡迎留言或者來信[email protected]交流。


本文出自 “對影成三人” 部落格,請務必保留此出處http://ticktick.blog.51cto.com/823160/1432140

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.