怎么给ndkgcc编译指定glibc版本cc版本

Android上通过gcc编译普通的C程序
1.编译可执行程序
1.1 通过mk脚本编译
目录结构:
Android.mk内容十分满简单:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE:= main_exec
LOCAL_SRC_FILES := main.c
include $(BUILD_EXECUTABLE)命令下,cd到jni的上一级目录,然后执行ndk-build命令:
E:\GitHub\ndk_tutorial\android_build_c_exec\mk_ap>ndk-build
[armeabi] Compile thumb
: main_exec
libs/armeabi/main_exec
在jni同级目录下, libs/armeabi/下生成可执行程序main_exec
1.2 通过android ndk提供的arm-linux-androideabi-gcc.exe工具编译
目录结构:
main.c命令行,cd到gcc_app目录下,然后执行下面命令:
D:\android-ndk-r9b--x86\toolchains\arm-linux-androideabi-4.6\prebuilt\windows\bin\arm-linux-androideabi-gcc.exe --sysroot=D:\android-ndk-r9b-windows-x86\platforms\android-13\arch-arm -o main_exec main.c
在当前目录下生成main_exec可执行程序。
--sysroot是执行的include和lib目录,去掉会报一堆定义找不到错误。具体可以gcc --help查看。
2.adb将main_exec拷贝到手机上执行
具体操作如下:
E:\GitHub\ndk_tutorial\android_build_c_exec\gcc_app>adb push main_exec /sdcard/
1528 KB/s (6260 bytes in 0.004s)
E:\GitHub\ndk_tutorial\android_build_c_exec\gcc_app>adb shell
shell@mako:/ $ cp /sdcard/main_exec /data/local/
cp /sdcard/main_exec /data/local/
cp: /data/local/main_exec: Permission denied
1|shell@mako:/ $ cp /sdcard/main_exec /data/local/tmp
cp /sdcard/main_exec /data/local/tmp
shell@mako:/ $ cd /data/local/
cd /data/local/
shell@mako:/data/local $ cd tmp
shell@mako:/data/local/tmp $ ls -l main_exec
ls -l main_exec
-rwxr-x--x shell
-06 16:30 main_exec
shell@mako:/data/local/tmp $ chmod 751 main_exec
chmod 751 main_exec
shell@mako:/data/local/tmp $ ./main_exec
./main_exec
hello world
通过adb push到sdcard上,然后进入shell模式,从sdcard复制到/data/local/tmp 下(注意我的n4手机上/data/local下权限不够,进入tmp可以)。
chmod 751 设置可执行程序权限,然后执行。!。
1. /questions//how-to-use-arm-linux-androideabi-compiler
2. /questions/9868309/how-can-i-run-c-binary-executable-file-in-android-from-android-shell
相关代码:/dizuo/ndk_tutorial/tree/master/android_build_c_exec
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'Android&NDK&交叉编译C++代码生成.so共享库详细步骤
& 最近用yun os
进行交叉编译,实际赶脚就是ndk再干这个事,具体流程就不赘述了,以后有时间跟一下mm.sh和后续的的脚本。
& 主要是google了半天没有一个详细的正确的交叉编译的步骤,就想自己写一个吧。
& 主要讲一下具体的步骤,具体的ndk指令我就不说了,贴的文章都有:
& 首先是写一个.java文件,本例中是HprofDumper.java
具体如下:
public class
HprofDumper {
&public native boolean hprofDumper(String
filename, String outname);
然后用命令javac
HprofDumper.java 生成.class文件
HprofDumper 生成相应的.h文件
生成的.h文件如下
_Included_HprofDumper
_Included_HprofDumper
__cplusplus
extern "C"
jboolean JNICALL Java_HprofDumper_hprofDumper
& (JNIEnv *, jobject,
jstring, jstring);
__cplusplus
然后只需要在对应的.cpp文件完成相应函数即可,核心代码如下:
"HprofDumper.h"
jboolean JNICALL Java_HprofDumper_hprofDumper
(JNIEnv *env, jobject obj, jstring in_file,
jstring out_file)
& & const char *filename =
env-&GetStringUTFChars(in_file, 0);
& & const char *outname =
env-&GetStringUTFChars(out_file, 0);
& & return hprof_dump(filename,
其中hprof_dump是纯c++代码,引入即可。
有一点需要注意,标红了已经,就是生成的.h文件函数并没具体形参名字,只有形参类型,在.cpp文件中要加入相应的形参名字,本例为env、
obj、 in_file和out_file。
还有一点c和c++的区别,就是env的使用。
本例中C++为env-&GetStringUTFChars(in_file,
如果是C就应该改为(env)-&GetStringUTFChars(env,in_file, 0);
调用Java类型 :
C中调用Java中的String类型为
C语言方法名规则 :
Java_完整包名类名_方法名(JNIEnv *env, jobject thiz), 注意完整的类名包名中包名的点要用 _
参数介绍 :
C语言方法中有两个重要的参数, JNIEnv *env,
-- JNIEnv参数 :
该参数代表Java环境, 通过这个环境可以调用Java中的方法;
-- jobject参数 :
该参数代表调用jni方法的类,;
调用jni.h中的NewStringUTF方法 : 该方法的作用是在C语言中创建一个Java语言中的String类型对象,
jni.h中是这样定义的 jstring (*NewStringUTF)(JNIEnv*, const char*), JNIEnv
结构体中包含了 NewStringUTF 函数指针, 通过 JNIEnv 就可以调用这个方法;
完成代码编写后,在当前目录下完成Android.mk和Application.mk的编写
首先是Android.mk
本例中为:
LOCAL_PATH :=
$(call my-dir)
$(CLEAR_VARS)
LOCAL_MODULE
:= hprof-dumper
LOCAL_C_INCLUDES&+=
external/stlport/stlport
LOCAL_C_INCLUDES&+= bionic
LOCAL_C_INCLUDES&+=
bionic/libstdc++/include
LOCAL_SRC_FILES := HprofDumper.cpp \
& & xx.cpp \
& & xx.cpp \
& & xx.cpp \
& & xx.cpp \
& & xx.cpp \
& & xx.cpp \
& & xxx.cpp
LOCAL_SHARED_LIBRARIES&:=
libstlport
$(BUILD_SHARED_LIBRARY)
注意标红的是最关键的,LOCAL_C_INCLUDES&&顾名思义是需要的头文件的所在的目录,那三个参数主要为了引入STL,最重要!!LOCAL_SHARED_LIBRARIES&我一直生成失败就是没加这个参数,不光要引入头文件,还要引入具体的lib,这就是这个字段的作用。
具体字段的作用:
-- LOCAL_PATH : 代表mk文件所在的目录;
-- include $(CLEAR_VARS) : 编译工具函数,
通过该函数可以进行一些初始化操作;
-- LOCAL_MODULE : 编译后的 .so
后缀文件叫什么名字;
-- LOCAL_SRC_FILES:
指定编译的源文件名称;
-- include $(BUILD_SHARED_LIBRARY) :
告诉编译器需要生成动态库;
Applicaion.mk中就一行
APP_STL = stlport_static
表示使用stl静态库。
注意:我用了STL,大家没有用STL的当然不用引入这些啦~
mk文件还有很多其他字段:详细信息请戳:
因为google被屏了,没有代理的大家还是去棒子那看看吧。。。
然后就是ndk指令生成.so了
最后鸣谢一些blog:
本文在他们的基础上写成的。
&这个主要讲JNI和NDK是干嘛的
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。阅读前准备
这是一篇相对入门的文章。文中会涉及到少许NDK的知识,但个人认为对初学者来说都相对比较实用,因为都是在平时项目中遇到的(目前自己也是初学者)。一些其他高深的技术不再本文探讨范围之内(因为我不懂)。文章中可能会存在一些啰里八嗦的地方,抱歉,目前的行文风格如此,考虑以后变得牛逼点儿再改改文风,毕竟现在的阶段还是自嘲的情感因素占上风。
你要知道什么是NDK,我是用cocos2dx的,所以平日里还算经常有接触,如果不知道,那就skip这篇文章吧,否则你也看不懂,要不就自己google去。这里只会展开和Android相关的部分,iOS点到为止,详细不讨论。
我使用NDK的目的
cocos2dx之所以能跨平台,是因为那些被支持的设备的OS都能用某种方式运行C/C++生成的程序(或者库)。本身Android运行的cocos2dx的程序就是通过编译好一个大的动态库让Java加载实现程序启动的。一般情况下,cocos2dx的项目已经帮你屏蔽这些设置等的麻烦事情,至多增加一个你自己添加的源文件到mk文件中罢了,所以平时其实去接触这个的机会也不算太多,但是往往只要一有这种知识的涉及,就直接抓瞎了(这也是所谓框架带来的问题,虽然能让人从繁重的底层处理中解放出来,但是不知甚解往往遇到一些略微涉及到这些方面的问题就直接被拍死了,扯远了)。
特别是在接入其他平台SDK的时候尤为明显,好多三方的库都是带*.so文件的,这和平时用的代码隔了至少两层(cocos2dx的C++,Android的Java,Android的底层操作系统),因为*.so文件明显是给Android的OS去调用的,JAVA在这里知道个毛线。
就算不管三方的SDK接入,有很多情况还是会遇到一些棘手的问题。比如,你需要管理并使用socket,有好多解决方案, 比如在应用的C++层采用统一的接口,然后各自平台各自实现,Android的么就通过JNI去和JAVA交互,反正java的三方库是大而全的,基本找什么都有;iOS么也不差,类库也相当全(其他平台暂时省略,没弄过)。但是在cocos2dx中,首先要考虑的,我觉得是跨平台问题,如果各自平台各自实现,那就不要用cocos2dx了,直接按平台分几个项目组各自写就是了,难说执行效率还高好几个档次,但是开发成本就不好讲了。项目中,这个例子中我最终考虑使用的是libevent库,在Android和iOS上只要简单把对应的库编译出来就可以了,从调用到封装也都是C++的,和cocos2dx无缝连接,平滑过渡,个人感觉棒棒的。Android下面编译出动态库(也可以使用静态库)就靠NDK了,当然iOS上也有NDK的概念,反正说穿了,也就是个交叉编译的环境,XCode里面也带全了iOS对应的各种平台的交叉编译环境,原理是一样的,基于MAC是基于FreeBSD的前提,他们的编译过程其实也很类似(至少对我来讲),都是写个makefile文件,用各自平台对应的gcc折腾一下。
其实这次写这篇文章的起意是因为sqlite库的使用,下面文章中也会以这个做例子来阐述如何单独编译个动态库出来。
适用本篇文章的环境以及程序版本
操作系统:WIN7 (32bit/64/bit)(XP这种应该也问题不大)
NDK版本:r8、r9 ... (r8以下的么用过,不清楚)
cygwin:NULL(独立编译暂时用不到,虽然NDK的INSTALL文档里面说WINDOWS下还是需要装cygwin)
平时项目中NDK的使用
我自己项目中第一次去看和用NDK是iconv库。Android和iOS的程序都能很好得支持UTF8编码,但是因为我是用win32做测试,并且用VS2010作为开发工具的,平时的测试也都是VS调的,但是它对UTF8编码的支持很不友好,这点应该做cocos2dx的人都折腾过,开始翻来覆去想解决这个问题,后来找到篇文章说是编译器的缘故,并且MSDN上回复的意思是编译器小组也不准备就此问题来做适应修改(尼玛,心中千万只草泥马在奔腾),要么索性用UNICODE。UNICODE说实话之前被坑过几次,也没搞太明白,因为项目时间的缘故(尼玛,在开发时间和产品质量中找平衡是永远的痛)还是用自己熟悉的本地编码吧,反正目前没有国际化的预期,且碰到的问题都能解决。不过在字符串转换上还是要费点周章的,于是就用到了iconv库。这个在win32、android、iOS上都有对应的库(好嘛,就你了)。
在使用上(这里只记录下流水帐,详细不展开),其实也是照样画葫芦。首先把iconv源代码下过来,放cocos2dx源代码根目录下(这个是为了让NDK_MODULE_PATH中能找到iconv模块,这部分可以参考之前的一篇文章:),然后编写好iconv库的Android.mk文件(也就是编译所需要用到源代码和模块名称神马的,还有就是编译出来的是静态库还是动态库),打开项目的jni/Android.mk文件,添加上对应的库依赖即可。当你整个项目编译的时候就会看到iconv的源文件也一起编译了(不知道哪里看?尼玛,感觉不会再爱了&&)。
libevent库
这个是用到的第二个三方库,其载入的方法和iconv库一样,不再赘述,官方都有源码下载。或者翻这篇文章:,不过里面有些概念当时没理解,比如即使在ubuntu下交叉编译,用的也是NDK,不存在说使用ubuntu版本的gcc编译的情况(莫非这就是之前编译出来不能用的缘故?应该不会,呵呵)。
带着项目编译的麻烦之处
之前用到的iconv和libevent的库都是采用静态库的方式(前面没说明,反正也不是重点,因为用动态库的方式也一样),并且是带着项目一起编译的。如果来个新项目,这些代码还是会重新被编译,因为这几个库的Android.mk是在cocos2dx项目中的jni/Android.mk中被加载的。如果库小,还能忍受,因为编译一次的代价也不算太大,稍微等等就行了,但是如果是以下的情况,估计大家就会喝咖啡喝到吐为止:
库本身就比较大,一次编译需要的时间比较长
随着新功能增加和开发的持续,会加入各种三方库,本身库的数量会变多
你要编译不同CPU架构对应的库(这个真是太苦逼了)
并且,修改了Application.mk后势必会重新编译,那个苦啊(连同2dx的源文件一起重编啊,尼玛坑爹啊)。本身,程序在发布的时候,会移除Application.mk中的一些宏定义,比如 -DCOCOS_DEBUG=1。如果,我是说如果,以上三个条件都被无情得满足了,那么,一旦编译启动的时候,你就可以打个电话约上两三好友,跑到市中心的星巴克,点上几杯卡布其诺(做得不好看让他们重做,味道不对也让他们重做,以上动作可以重复N次),然后装逼一个下午,顺带可以和好友吐槽下这坑爹的交叉编译耗时冗长令人发指。聊得累了,也差不多可以告别这悠长的下午茶时间,跟着节奏慢悠悠回到电脑前,一看,尼玛,还在编译mips的版本。当然,后面的各渠道打包又是一条漫长的不归路。这时候我只想说两个字:『呵呵』。
回到正题,其实这方面的的问题,cocos2dx里面已经有很好的方法去避免了(其实也不算是cocos2dx去避免,而是gcc),那就是prebuilt。在cocos2dx\platform\third_party\android\prebuilt目录下,有好多预编译好的库,如libcurl,libpng等等。这些库是不会重新编译的(你也编译不了,只有头文件,除非你吃饱了去自己整源代码弄一份),可以参考项目的jni/Android.mk中对于这些库的加载,然后自己写一个。正好,昨天在做一个消息中心的东西,因为要保存用户的离线消息,所以,再三考虑,还是使用sqlite来作为『存储介质』。下面就来讲下生成sqlite的预编译版。
用NDK编译独立的库文件
从这里开始,建议对NDK不太了解的人去看下NDK解压后根目录下的README.txt,里面讲了你大致需要至少的知识,以及如果不知道要去看哪个文档。
硬盘里面要有NDK,版本建议r8以上(包含r8),并且把NDK的目录加到环境变量中去,使得shell能在任意目录访问到NDK目录下的ndk-build(或者ndk-build.cmd)文件。
Sqlite库的使用
cocos2dx源码中有sqlite的库,但是很奇怪的是只有win32的版本,虽然Android和iOS的系统中都自带sqlite库,但是如果我们程序中要用到的话,要么通过转接层(如JNI)去调用系统原生的方法去操作,要么自己挂一个sqlite库上去。前一种方法作为C/C++程序员来说显然很不愿意,虽然我对JAVA也不排斥,但是这么调来调去的,自己很容易搞晕,并且两边都有对应的代码,代码耦合度明显上升个数量级,关键尼玛Android和iOS还要各自实现一份,即使各自的实现不麻烦,但只要想到要这么做我就觉得好麻烦,囧rz。所以我毫不犹豫选择挂库的方式。
当然,我对cocos2dx不带Android和iOS的sqlite库的方式也有点想法,不知道是不是本来就不用实现呢?于是我把真机上system/lib目录下的libsqlite.so文件拿出来,然后加载到项目中去,竟然也可以用,呵呵,无语。不过link的时候,报了一堆的warning,估计是Android系统带的sqlite库是有其他库依赖,这些库明显在Android系统中。iOS的没试过,估计也差不多。每次编译都要看那一堆warning,好蛋痛,并且我发现最终我的方法还是会让这个libsqlite.so装到apk中(尼玛不是系统自带么),那还不如我自己编译一个放上去安全,还不用考虑版本兼容性的问题。
Sqlite库的编译
首先要去下载sqlite的源代码,我下载到的版本是3.8.0.2(),释放到任意目录,我是把它翻到NDK的samples里面了,反正编译一下还是要把那几个库文件拿出来放到cocos2dx的prebuilt目录下的。
建立一个文件夹叫sqlite3(呃,我还是带上大版本,以便于日后区分,目前看来是有点多此一举),然后建立jni文件夹,放上压缩包中的sqlite3.c和两个头文件(头文件目前可有可无),shell那个没用,不需要。然后在目录下建立两个mk文件,Android.mk和Application.mk。写完后,在win7下,可以在sqlite3目录下按住shift点右键,菜单中选择『从此处打开命令窗口(W)』,然后输入 ndk-build 来对项目进行编译。
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_ARM_MODE := arm
LOCAL_MODULE := sqlite3
LOCAL_SRC_FILES := sqlite3.c
include $(BUILD_SHARED_LIBRARY)
这个文件表明要生成一个libsqlite3.so的动态库,模块名称叫做sqlite3。如果要编译的是静态库的版本,则把后面的$(BUILD_SHARED_LIBRARY)修改为$(BUILD_STATIC_LIBRARY)即可。
Application.mk
APP_OPTIM := release
APP_ABI = all
Application.mk的内容比较简单,首先表明是release版本(加不加对编译没有影响,就是编译器会对执行速度进行优化),然后APP_ABI中填入的是all,表明会进行所有支持的CPU架构的版本编译,针对的就是4个,armabi、armabi-v7a、x86、MIPS这四个。
编译速度,我觉得挺慢的。
然后再写一个可以作为库加载的Android.mk,连同这几个文件都放到prebuilt的下面去:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_ARM_MODE := arm
LOCAL_MODULE := sqlite3
LOCAL_SRC_FILES := libs/$(TARGET_ARCH_ABI)/libsqlite3.so
include $(PREBUILT_SHARED_LIBRARY)
之后就可以把它放到项目中使用了,当然,项目中要明确加载这个模块。这里只写了动态库的mk,静态库的自己照样画葫芦写一个吧,可以参考已有的实现。具体加载方法可以参考这篇文章:,昨天试验了下貌似不需要在Java中显示loadlibrary这个sqlite库,还是各自试验下吧。
我把编译好的静态库和动态库都放在这里可以下载(意思意思,卖一个币,贪财贪财):
阅读(...) 评论()博客访问: 1041483
博文数量: 392
博客积分: 9328
博客等级: 中将
技术积分: 2658
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: 嵌入式
对于Linux我也是一位新人,弄Linux也就半年左右吧,同时作为Android队伍中的一个新人。&由于我最近每天使用的是CentOS 5.5,所以选择CentOS5.5作为我的开发环境。&我以前一直在LinuxSir潜水,第一次发贴,我还是细致的把我作的写下来。同时作为我的学习笔记我会把我的学习成果发上来的。&作为新人,如果有什么不对的地方,还望各位不吝赐教,多多关照~&目录&1、环境搭建&  1.1、JDK安装&  1.2、Eclipse安装&  1.3、ADT安装&  1.4、Android SDK安装&1.5、Android NDK安装&内容&1.1、JDK安装&没选用CentOS自带的Java环境,下载Oracle最新版本的java,下载地址为&直接Download,然后跳转页面选择Platform 中的Linux下载,我没有注册,直接点Continue进入下一个页面,选择你要下载的包的类型,我选择&jdk-6u21-linux-i586-rpm.bin 网速快的话一会儿就下完了。&下载完成后修改可执行权限#chmod +x jdk-6u21-linux-i586-rpm.bin&然后执行它&#./jdk-6u1-linux-i586-rpm.bin&过程中可能出现一些选择,直接yes&安装完成后配置环境变量程序默认安装到了 /usr/java 下面&注意:在有多项时,windows下是用 分号;隔开的,但linux 下使用 冒号:&#vim /etc/profile&在文件的最后面添加下面内容&export JAVA_HOME=/usr/java/jdk1.6.0_21&export JAVA_BIN=/usr/java/jdk1.6.0_21/bin&export PATH=$PATH:$JAVA_HOME/bin&export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar&export JAVA_HOME JAVA_BIN PATH CLASSPATH&完成以后查看java版本&#java -version&Java(TM) SE Runtime Environment (build 1.6.0_21-b06)&Java HotSpot(TM) Server VM (build 17.0-b16, mixed mode)&Java环境配置好了下面继续安装IDE,Google推荐用eclipse.& 1.2、Eclipse安装&我也是新人当然一切最新,eclipse也是下载最新版本Eclipse (Helios版)。Eclipse下载&&Eclipse IDE for Java Developers, 98 MB Linux 32 Bit&有过java使用开发经验的人基本知道,eclipse是绿色版的,解压就能使用。双击解压完成后eclipse文件夹中的eclipse文件就运行eclipse IDE for Java Dvelopers。很熟悉吧,设置workspace,后面是欢迎界面关掉就进去开发环境了。&我把Eclipse放到/home/Android/下,以后我就把需要的东西都放到其下。&1.3、ADT安装&ADT 版本:&ADT 0.9.7 (May 2010) Android开发工具&(1)使用 Eclipse 的升级管理器来安装ADT:&1. 启动 Eclipse, 然后进入 Help > Install New Software.&2.&在 Available Software 对话框里,点击 Add....&3. 出现 Add Site 对话框,在 Name 域里面输入一个名字 (例如, "Android Plugin")&,在 "Location" 域里面输入 URL:&&4. 注意:如果有问题,可以把 https 换成 http 试一下。点击&OK.&5. 回到 Available Software 界面,你应该看到 "Developer Tools"&。选取 checkbox&。点击 Next, 接受 license agreement, 然后点击 Finish。&6. 重起&Eclipse.&(2)手动安装ADT,下载ADT。&& ADT 0.9.7&&&下载完成后解压,把对应文件拷贝到eclipse相应目录即可。.&同样也可以像上面那样把Help > Install New Software.安装的地址指向解压后ADT的文件夹。&1.4、Android SDK安装&下载Android SDK 核心包&for Linux版本&&需要知道的是这个 zip 包并不是一个完整的软件包。Android 软件包采用“组件”的形式,用户可以根据需要选取组件。上述zip文件只包含了一个组件管理工具和一个基本的工具组件。&.&下面我们就配置上面已经安装的ADT&配置 Eclipse&里的 ADT,使其指向 Android SDK 。&1. 选取 Eclipse&Window > Preferences...&&2.&选择 Android&3. 点击 Browse...&定位 Android SDK 目录。例如我的目录:/home/Android/android-sdk-linux_86&4. 点击&Apply,&然后 OK.&开发环境建基本搭建立好了,但是我们还是升级下载一些东西,把完整的SDK都下载完。里面有许多更新包,包含了Doc文档,Samples示例代码,以及SDK文件。整个过程会自动下载安装:&1.运行&Eclipse,&选取 Window > Android SDK and AVD Manager.&2.在左侧面板选择&Installed Packages&3.点击&Update All.&出现&Choose Packages to Install 对话,选择Accept All,点击Install&大概1.4GB的容量。网没问题的话,一晚上绝对完事。&  4、创建AVD&  为使Android应用程序可以在模拟器上运行,必须创建AVD。&  (1)、在Eclipse中。选择Windows > Android SDK and AVD Manager&  (2)、点击左侧面板的Virtual Devices,再右侧点击New&  (3)、填入Name,选择Target的API,SD Card大小任意,Skin随便选,Hardware目前保持默认值&(4)、点击Create AVD即可完成创建AVD&看了一些资料,现在开发都基于1.6开发。以后只需在版本编译就可,我没试过~&1.5、Android NDK安装&一些Java开发者摒弃了像C一类的过程化语言,相比起Android的开源项目而言,C世界已经积累了很多可供复用的开源项目(包括很多著名的游戏如Quake、DOOM),在执行效率上涉及到大量数学运算的部分也可以考虑由C完成。&考虑开发C/C++程序 可能需集成Eclipse CDT&CDT,就是Eclipse的C/C++环境,在线安装地址&&。&也可以下载完成后手动安装,就像我上面介绍的那样手动安装&1启动 Eclipse, 然后进入 Help > Install New Software.2在 Available Software 对话框里,点击 Add....&3.添加解压后文件夹地址->local 选择好后就ok.然后选择安装的需要的内容.&我运行一个NDK的例子工程后发现,CDT并不是必须的,估计以后可能会用到,或者集成QT开发环境会用到吧.&NDK 下载地址:&NDK的安装很简单,就是将下载的包进行解压到指定位置即可,解压之后我们一般需要配置环境变量,这里我们将环境变量的配置放在最后一起来配置.&解压位置:/home/Android/android-NDK-r4b&#vim /etc/profile&#set NDK env&NDK_ROOT=/home/Android/android-ndk-r4b&export PATH=$NDK_ROOT:$PATH&NDK 编译时还需配置一些,以HelloJin. 很经典的Hello~创建Android 工程导入以存在的source.&打开hello-jni工程属性,选择builder,选择program,点OK&配置如下,NDK_Builder,location和working directory&/usr/bin/bash和/usr/bin&(注:也可能是/bin/bash 和 /bin)arguments要和你的工程目录一致。&我的arguments是:--login -c "cd /home/Android/android-ndk-r4b/samples/hello-jni && $NDK_ROOT/ndk-build"&完成后就可以运行.
阅读(1161) | 评论(0) | 转发(1) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。

我要回帖

更多关于 gcc指定libc库版本 的文章

 

随机推荐