Android之JNI:Android Studio使用Android.mk编译C/C++源码

1.生成.h头文件,配置.c文件(可查看Android之JNI:Android Studio使用Gradle编译C/C++源码)

2.编写Android.mk
//Android.mk简介参考链接:http://blog.sina.com.cn/s/blog_602f8770010148ce.html
LOCAL_PATH:= $(call my-dir) //Android.mk 文件首先必须定义LOCAL_PATH变量,以便用于在开发树中查找源文件.宏函数'my-dir'由编译系统提供,用于返回当前路径(即包含Android.mk的目录)
include $(CLEAR_VARS) //CLEAR_VARS由编译系统提供,指定让GNU MAKEFILE清除许多LOCAL_XXX变量(例如 LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES, 等等...),除LOCAL_PATH.因为所有的编译控制文件都在同一个GNU MAKE执行环境中,所有的变量都是全局的,所以有必要.
LOCAL_MODULE := juziJni //表示编译的动态库名称.名称必须唯一,而且不包含任何空格且不要以lib开头
LOCAL_SRC_FILES:= jni_use.c //表示源代码文件
include $(BUILD_SHARED_LIBRARY) //表示编译生成共享库,是编译系统提供的变量,指向一个GNU Makefile脚本,负责收集自从上次调用'include $(CLEAR_VARS)'以来,定义在LOCAL_XXX变量中的所有信息,并且决定编译什么,如何正确地去做.(BUILD_STATIC_LIBRARY:编译为静态库;BUILD_SHARED_LIBRARY :编译为动态库;BUILD_EXECUTABLE:编译为Native C可执行程序)
3.linux环境下使用ndk-build命令编译生成.so文件
若要指定架构,可以使用如下命令:
 
  1. ndk-build APP_ABI="armeabi armeabi-v7a x86 mips"
4.使用生成的.so文件【Android之Android Studio下使用JNIAndroid Studio下使用.so文件
小Tips:
1.Android.mk:2: *** missing separator.  Stop.
LOCAL_PATH:= $(call my-dir)
include$(CLEAR_VARS)
LOCAL_MODULE := juziJni
LOCAL_SRC_FILES:= jni_use.c
include$(BUILD_SHARED_LIBRARY)
解决办法:$符号前面必须加一个空格
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := juziJni
LOCAL_SRC_FILES:= jni_use.c
include $(BUILD_SHARED_LIBRARY)
2./home/emily/android-ndk-r10e/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: fatal error: ./obj/local/armeabi/PassWorld: Input/output error
collect2: error: ld returned 1 exit status
解决办法:在虚拟机和window的共享文件中编译会出现这种问题,copy项目至linux目录即可。

原文链接: https://www.cnblogs.com/linux007/p/5782729.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    Android之JNI:Android Studio使用Android.mk编译C/C++源码

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/238923

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月13日 下午6:00
下一篇 2023年2月13日 下午6:00

相关推荐