在android 上面 运行纯C helloworld
由于要测系统的CPU属性,需要独立编译应用程序,便试了下编译纯C 程序,测试通过。
CC := $(NDK_BASE)/toolchain/arm-eabi/bin/arm-eabi-gcc
AR := $(NDK_BASE)/toolchain/arm-eabi/bin/arm-eabi-ar
INC := -I$(NDK_BASE)/include/bionic/arch-arm/include \
-I$(NDK_BASE)/include/bionic/include \
-I$(NDK_BASE)/include/kernel/include \
-I$(NDK_BASE)/include/libm/include \
-I$(NDK_BASE)/include/libm/include/arm \
-I$(NDK_BASE)/include/libstdc++/include
LINK := -nostdlib -Bdynamic \
-Wl,-T,$(NDK_BASE)/config/armelf.x \
-Wl,-dynamic-linker,/system/bin/linker \
-Wl,-z,nocopyreloc \
-L$(NDK_BASE)/lib \
-Wl,-rpath-link=$(NDK_BASE)/lib \
$(NDK_BASE)/lib/crtbegin_dynamic.o
POSTLINK := $(NDK_BASE)/lib/crtend_android.o
%.o: %.cpp
$(CC) $(CFLAGS) -fno-exceptions -fno-rtti $(INC) -o $@ -c $<
%.o: %.c
$(CC) $(CFLAGS) $(INC) -o $@ -c $<
include ./config.mk
EXECUTABLE := TEST
SOURCES := main.c
OBJECTS := $(SOURCES:.c=.o)
LIBS := -lc -lm
all: $(EXECUTABLE)
# need $(LINK) before all objects and $(POSTLINK) after all objects for
# android runtime setup.
TEST: $(OBJECTS)
$(CC) $(LINK) -o $@ $(OBJECTS) $(LIBS) $(POSTLINK)
clean:
rm -rf *.o
rm EXECUTABLE
测试程序 就是 printf("Hello world")
另外注意下,一般上传到手机data目录,并chmod下
相关文档:
用单引号引起的一个字符实际上代表一个整数,整数值对应于改字符在编译器采用的字符集中的序列值。
用双引号引起的字符串,代表的是一个指向无名数组起始字符的指针,该数组被双引号之间的字符以及一个额外的二进制值为零的字符'\0'初始化。
printf("Hello world\n");
与
char hello[] = {'H', 'e', 'l', 'l', 'o', ' ' ......
无意中翻出了N年前写的递归-回溯法求解8皇后问题,干粹塞到博客中吧。
#include <stdio.h>
#include <conio.h>
#include <math.h>
#define QUEENS 8
// 记录解的序号的全局变量。
int iCount = 0;
// 记录皇后在各列上的放置位置的全局数组。
int Site[QUEENS];
// 递归求解的函数。
void Q ......
在c++ prime书中看到过,在DLL和lib中看到过,但是每次看过就不求甚解地一扫而过。心里知道有extern c这个语句,却不知道该用在哪里,又能起到什么作用。唉,想想自己也算是写过不少CODE的人了,可这种眼高手低的毛病却从没改变过。今天突然想起extern这个关键字,遂决定不能再这么浪 ......
首先看下下面这段:
int main()
{
char *name = "fengkewei";
char name1[] = "fengkewei";
char *name2 = "fengkewei";
char *name3 = "woaifengkewei";
int i = 10;
int j = 10;
int k = 11;
return 0;
}
若您觉得它们应该都保存在内存中的一块地方,那请往下看。。。。
下面是编译器为各个变量分配的内存地 ......