我的第一篇博客——Android Studio 2.2 NDK开发之Cmake 编译多个源文件的问题

来源:互联网 发布:nginx日志 编辑:程序博客网 时间:2024/05/21 22:35

版权声明:本文为博主原创文章,未经博主允许不得转载。

我的技术之旅从现在开始啦,第一次写博客,欢迎大家批评指正。

这几天一直在搞Android Studio升级到2.2版本后Android NDK的开发问题,忙了几天,走了很多弯路,今天终于解决,在此进行记录。以前用1.5的版本开发了一个Android端调用底层C语言实现的图像处理算法APP,该版本只需在build.gradle中的defaultConfig{ndk{}}block中添加一些配置信息,IDE自动帮你打包源文件信息编译成.so的库,如下:

defaultConfig{    ndk{        moduleName "Detect"//要编译的库名        ldLibs "log", "z", "m", "jnigraphics"//依赖的库        abiFilters "armeabi", "armeabi-v7a", "x86"//平台信息        stl "stlport_shared"//支持C++的库    }}

升级到Android Studio 2.2后,NDK使用Cmake来进行编译库文件,方便进行管理和维护,建好工程后app/src/main/目录下会生成一个cpp文件夹,用户需要在CmakeLists.txt中写需要的配置信息将cpp目录下的C语言源文件编译成库文件。在编译过程中遇到如下问题:
这里写图片描述
找到原因是CmakeLists.txt中没有加入源文件,源文件的上方还出现以下提示:
这里写图片描述
将源文件加入到CmakeLists.txt中的add_library(源文件相对路径)块中,编译通过,但是在运行过程中闪退,Android Monitor提示找不到本地函数,纠结了很久,找了很多原因,终于解决了,其实只是少了一个关键字。
解决办法如下:
因为源文件被分成了多个文件,需要在native-lib.cpp文件中每个本地函数实现的外部加上extern "C"{本地函数的实现部分},它的作用是进行外部调用,允许调用外部源文件的函数。至此几天的问题就解决啦。

0 0
原创粉丝点击