网站开发工程师公司,购物网站推广,互联网广告营销是什么,wordpress 评论 插件2019独角兽企业重金招聘Python工程师标准 http://www.cnblogs.com/GoAhead/p/4186707.html 通过上网搜索#xff0c;你可以发现很多种编译Android native应用的方法#xff0e;我想说的是#xff0c;不同的控制台应用, 守护程序(daemon), C/C库#xff0c;等… 2019独角兽企业重金招聘Python工程师标准 http://www.cnblogs.com/GoAhead/p/4186707.html 通过上网搜索你可以发现很多种编译Android native应用的方法我想说的是不同的控制台应用, 守护程序(daemon), C/C库等等这些程序在你自己的计算机上编译没有任何问题 为了给Android编译程序你需要ARM工具链(toolchain). 我发现有两种主张分别是使用Android Prebuild toolchain和CodeSourcery1)Android Prebuild toolchainAndroid没有使用传统的libc库相反它用了Bionic库一个由Google开发的用在Android移动软件平台上的轻量级的libcBionic被裁剪到只支持 Android系统 请看 六百万美元的c程序库 2)CodeSourceryCodeSourcery是ARM的合作伙伴 专门为ARM处理器开发增强GUN工具链的并提供验证过的GNU工具链这些工具链有很多不同的版本对于Android平台需要 arm-none-linux-gnueabi 而 arm-none-eabi是没有glibc包含在里面的主要面向那些编译完整的native库和应用(比如FreeRTOS)译者注: arm-none-eabi就是用来编译裸机程序的请参考 最简单的ARM裸机程序 我个人的观点如果白手起家开始创建一个Android的应用程序你应该选择Bionic.但是如果你选择从你的PC环境移植一个库到Android,你应该选择CodeSourcery如果你使用到线程或者C异常Bionic库也不能完全支持它们(实际上它根本就不支持异常) agcc.pl是Andrew Ross开发的一个脚本让你以一种很简单的方法来自动包含常用的库使用Android的ARM工具链gcc某种程度上他像makefile 第种方法 使用Makefile和Android NDK AR arm-linux-androideabi-ar
AS arm-linux-androideabi-as
CC arm-linux-androideabi-gcc
CXX arm-linux-androideabi-g
LD arm-linux-androideabi-ld.goldNDK_KIT /home/tim/android-ndk-r10b
PLATF_KIT platforms/android-9ARM_INC $(NDK_KIT)/$(PLATF_KIT)/arch-arm/usr/include
ARM_LIB $(NDK_KIT)/$(PLATF_KIT)/arch-arm/usr/libOBJS hello.o
EXES hellohello : hello.o$(LD) --dynamic-linker/system/bin/linker -nostdlib \-rpath-link$(ARM_LIB) \$(ARM_LIB)/crtbegin_dynamic.o \-L$(ARM_LIB) -lc \-o hello hello.ohello.o: hello.c$(CC) -I $(ARM_INC) -c hello.cclean:rm -f $(OBJS) $(EXES) 源代码 #include stdio.hint main(int argc, char* argv[])
{printf(Hello Android\n);return 0;
} 设置环境变量 envsetup.sh export PATH$PATH:/home/tim/android-ndk-r10b/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin 最后运行 make 就可以了 关于 -rpath-link选项请参考 gcc链接选项 第二种简单方法,使用shell脚本 #!/bin/shOSlinux
ANDROIDSDKandroid-14PROGDIR/home/tim/android-ndk-r10b/PROGDIRcd $PROGDIR pwd
ARMEABIGCC$PROGDIR/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc
ARMEABILIB$PROGDIR/platforms/$ANDROIDSDK/arch-arm/usr/lib
ARMEABIINC$PROGDIR/platforms/$ANDROIDSDK/arch-arm/usr/include
ARMEABICRT$ARMEABILIB/crtbegin_dynamic.o $ARMEABILIB/crtend_android.oLINKER/system/bin/linkerecho GCC:$ARMEABIGCC LIB:$ARMEABILIB LINKER:$LINKER PARAMS:$
echo CRT:$ARMEABICRT$ARMEABIGCC $ -Wl,-rpath-link$ARMEABILIB,-dynamic-linker$LINKER -L$ARMEABILIB $ARMEABICRT -I$ARMEABIINC -nostdlib -lc 保存为b./b hello.c -o hello就可以了 实际就是运行命令 /home/tim/android-ndk-r10b/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc \-Wl,-rpath-link/home/tim/android-ndk-r10b/platforms/android-16/arch-arm/usr/lib,-dynamic-linker/system/bin/linker \-L/home/tim/android-ndk-r10b/platforms/android-16/arch-arm/usr/lib \/home/tim/android-ndk-r10b/platforms/android-16/arch-arm/usr/lib/crtbegin_dynamic.o /home/tim/android-ndk-r10b/platforms/android-16/arch-arm/usr/lib/crtend_android.o \-I/home/tim/android-ndk-r10b/platforms/android-16/arch-arm/usr/include -nostdlib -lc \hello.c -o hello crtbegin_dynamic.o 和 crtend_android.o必须配对使用 第三种方法用–sysroot也是可以的 #!/bin/shNDK/home/tim/android-ndk-r8e
SYSROOT$NDK/platforms/android-9/arch-arm
CC$NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc --sysroot$SYSROOT
CFLAGS-marcharmv7-a -mfloat-abisoftfp -mfpuneon
LDFLAGS-Wl,--fix-cortex-a8
$CC $ http://www.srombauts.fr/2011/03/06/standalone-toolchain/ #include stdio.h
#include android/log.h#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, hello-ndk, __VA_ARGS__))int main(void)
{printf(Hello from NDKn);LOGI(Hello from NDK);return 0;
} 果然厉害上面这段代码都可以这样编译 ./b9 -l log nl.c -o hn 用Makefile也能搞 CC arm-linux-androideabi-gcc
CFLAGS -Wall -g
LDFLAGS -llog
SRC hello-ndk.c
OBJ $(SRC:.c.o)
EXE hello-ndkall: $(SRC) $(EXE)$(EXE): $(OBJ)$(CC) -o $ $^ $(LDFLAGS)%.o: %.c$(CC) -o $ -c $ $(CFLAGS)clean:rm -f *.o $(EXE) 编译so库也是可以厉害 CC arm-linux-androideabi-gcc
CFLAGS -Wall -g
LDFLAGS -llog -shared
SRC hello-ndk.c
OBJ $(SRC:.c.o)
EXE libhello-ndk.so 还可以直接运行 gcc /home/tim/android-ndk-r10/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc --sysroot/home/tim/android-ndk-r10/platforms/android-3/arch-arm -lc -lm -g main.c -o mm 第种方法用ndk-build 创建工程目录hello然后在其下创建子目录jni然后在jni下创建两个文件一个是hello.c另外一个是Android.mk内容如下 LOCAL_PATH: $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:hello.c
LOCAL_MODULE : helloworld
LOCAL_MODULE_TAGS : optional
include $(BUILD_EXECUTABLE) 其中 LOCAL_MODULE_TAGS : optional 这行可以不要 进入到hello目录下运行下面的命令 # export NDK_PROJECT_PATHpwd
# ndk-build
Compile thumb : helloworld hello.c Executable : helloworld Install : helloworld libs/armeabi/helloworld 转载于:https://my.oschina.net/ruiwong/blog/626094