1. Android studio中能直接用HAL文件吗,而不用生成.so文件
2. gcc工具链编译so
GCC生成动态链接库(.so文件):-shared和-fPIC选项
Linux 下动态链接库(shared object file,共享对象文件)的文件后缀为.so,它是一种特殊的目标文件(object file),可以在程序运行时被加载(链接)进来。使用动态链接库的优点是:程序的可执行文件更小,便于程序的模块化以及更新,同时,有效内存的使用效率更高。
-
GCC 生成动态链接库
如果想创建一个动态链接库,可以使用 GCC 的-shared选项。输入文件可以是源文件、汇编文件或者目标文件。
另外还得结合-fPIC选项。-fPIC 选项作用于编译阶段,告诉编译器产生与位置无关代码(Position-Independent Code);这样一来,产生的代码中就没有绝对地址了,全部使用相对地址,所以代码可以被加载器加载到内存的任意位置,都可以正确的执行。这正是共享库所要求的,共享库被加载时,在内存的位置不是固定的。 -
指定so的路径
export LD_LIBRARY_PATH=. -
两个-I指定头文件的路径,找不到哪个都文件就用 find / -name jni_md.h 2> /dev/null 查询
- fatal error: jni.h: No such file or directory
- /usr/lib/jvm/jdk1.6.0_43/include/jni.h:27: fatal error: jni_md.h: No such file or directory
compilation terminated.
- 运行结果
3. NDK编译so
https://www.cnblogs.com/rohens-hbg/p/10676681.html