歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android開發實踐:Android交叉編譯工具鏈的使用

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

日期:2017/3/1 9:36:35   编辑:Linux編程

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

  1. http://www.linuxidc.com/Linux/2014-12/110167.htm
  2. http://www.linuxidc.com/Linux/2014-12/110168.htm

經常搞嵌入式開發的朋友對於交叉編譯環境應該並不陌生,說白了,就是一組運行在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: clean

NDKROOT=/opt/android/ndk

PLATFORM=$(NDKROOT)/platforms/android-14/arch-arm

CROSS_COMPILE=$(NDKROOT)/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/arm-linux-androideabi-

CC=$(CROSS_COMPILE)gcc

AR=$(CROSS_COMPILE)ar

LD=$(CROSS_COMPILE)ld

CFLAGS = -I$(PWD) -I$(PLATFORM)/usr/include -Wall -O2 -fPIC -DANDROID -DHAVE_PTHREAD -mfpu=neon -mfloat-abi=softfp

LDFLAGS =

TARGET = libmath.a

SRCS = $(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]交流。

最簡單的Ubuntu Touch & Android 雙系統安裝方式 http://www.linuxidc.com/Linux/2014-01/94881.htm

在Nexus上實現Ubuntu和Android 4.4.2 雙啟動 http://www.linuxidc.com/Linux/2014-05/101849.htm

Ubuntu 14.04 配置 Android SDK 開發環境 http://www.linuxidc.com/Linux/2014-05/101039.htm

64位Ubuntu 11.10下Android開發環境的搭建(JDK+Eclipse+ADT+Android SDK詳細) http://www.linuxidc.com/Linux/2013-06/85303.htm

Ubuntu 14.04 x64配置Android 4.4 kitkat編譯環境的方法 http://www.linuxidc.com/Linux/2014-04/101148.htm

Ubuntu 12.10 x64 安裝 Android SDK http://www.linuxidc.com/Linux/2013-03/82005.htm

更多Android相關信息見Android 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=11

Copyright © Linux教程網 All Rights Reserved