起因
由于需要写些可执行native代码,但又懒得开AS,生成的可执行elf也不打包进apk。所以自己参看之前的gcc与make博客,简单写了下交叉编译工具。
后来发现直接建一个jni的文件夹后再里面写android.mk文件并把相关c文件放于同一目录下,执行ndk-build会自动在libs中生成…..不用建项目而且更好用…..mdzz
|
|
说明:目前只能实现单个自定义c文件编译,且需要输入文件名参数,示例:
make NAME=hello
就可编译hello.c了
make so NAME=xxx
就可以编译为so库
-I -L -l
有了-I 和-L 编译时找.h和连接时找.o .a .so 的路径就有了
printf什么的库名字是指定好的,gcc会自动寻找这些基本库文件(但个数有限),路径已经由你指定了。所以能找到。(自己猜测,问问权威的老师)
后记:那是运行库…c运行时最基本的库,必连接的
所以特定需要的库手动添加就好了…..
-l(小写L)表示添加的库 比如-llog是添加log库(NDK库)去连接。等于在后面直接加liblog.so/a 参加连接,具体用那个用-Bdynamic动态与-Bstatic静态指定
–sysroot:
如果在编译时指定了-sysroot就是为编译时指定了逻辑目录。编译过程中需要引用的库,头文件,如果要到/usr/include目录下去找的情况下,则会在前面加上逻辑目录。相当于默认路径
PIE和PIC
区别
PIE:用在可执行文件
PIC:用在库文件
共同点
生成跟位置没有关系的symbol
make
make自动编译能做的只是.c->.o自动而已