android编译器链接过程,程序的编译链接过程

1,程序的编译链接过程stdio.h 只是一个函数声明的头文件,实现在已经编译好的库文件中,一般情况 IDE 会自动连接标准库,不需要你管 。链接时退出是vc工具自身的问题 , 重新打开工程rebuild all 。建议每次编译过程中先save all 。
2 , eclipise中安卓编译器nullpointerexception package comexample楼上在说啥涅?这个不是简单网页的问题咧 。。写java估计都是用MyEclipse的吧 。呵呵,问题在代码上有一句遗漏了 。首先说一下,这个是空指针异常,估计你不会不知道的 , 呵呵 。具体问题在你的 rs = stmt.executeQuery(sql)这一行吧 。因为你的sql...3420
3,如何理解程序的编译链接加载等各个过程编译是将高级程序语言(c,c++,c#等)转换成汇编语言,并且将变量翻译成寄存器链接是将多个编译过的文件组合成一个文件 , 并且加入程序调用的库函数等所需的其他资源加载是将以上处理过的后生成的指令(二进制码)在执行前加载到内存中 , 并提供地址翻译 。stdio.h头文件中只是声明了函数原型 , 也就是函数接口是怎样的;编译时,编译器会核对你使用的函数的用法 是否与 头文件中声明的该函数原型一样,比如我这样使用getchar()函数: getchar("%d", &n);编译器会报错,头文件声明的函数原型不符合你的用法 。对于那些未在c语言代码文件内定义,但又使用到的函数,编译器会留着一个“接口”,等待链接时将接口接好 。在链接时,编译器就会将这些目标文件链接成一个可执行文件;就像拼图一样 , 链接前是零散的图块,链接后,就拼成了完整的一张图 。stdio.h里声明的函数已经在标准库中 , 这个标准库,是已经被编译的目标文件,编译器在进行链接时,默认将标准库与你的程序目标文件链接,最后成为一个可执行程序 。【android编译器链接过程,程序的编译链接过程】
4,如何制定android交叉编译工具链经常搞嵌入式开发的朋友对于交叉编译环境应该并不陌生,说白了,就是一组运行在x86 PC机的编译工具,可以让你在PC机上编译出目标平台(例如ARM)可识别的二进制文件 。Android平台也提供了这样的交叉编译工具链,就放在Android的NDK开发包的toolchains目录下,因此,我们的Makefile文件中,只需给出相应的编译工具即可 。废话就先说到这,直接上例子,我们目标是把下面这个math.c文件编译成一个静态库文件:#include 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工程中和使用了 。经常搞嵌入式开发的朋友对于交叉编译环境应该并不陌生,说白了 , 就是一组运行在x86 pc机的编译工具,可以让你在pc机上编译出目标平台(例如arm)可识别的二进制文件 。android平台也提供了这样的交叉编译工具链,就放在android的ndk开发包的toolchains目录下 , 因此,我们的makefile文件中,只需给出相应的编译工具即可 。废话就先说到这,直接上例子,我们目标是把下面这个math.c文件编译成一个静态库文件:#include 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 =

    推荐阅读