AndroidStudio的CMake开发时遇到的异常及解决方案_androidstudio cmake error at mp3/cmakelists.txt:32-程序员宅基地

技术标签: android开发  android  cmake  异常  

最近用Android Studio开发Cmake时,由于工程在刚建成时没有选择include c++ support选项。。导致现在只能来填坑。

1.在main中新建一个cpp文件夹:
这里写图片描述
在里面添加你的.cpp和.h头文件,我这里添加了一个demo.cpp文件

2.在app的module下新建一个CMakeLists.txt文件:
这里写图片描述

文件中的内容如下:

# Sets the minimum version of CMake required to build the native  
# library. You should either keep the default value or only pass a  
# value of 3.4.0 or lower.  

cmake_minimum_required(VERSION 3.4.1)

add_library( # Sets the name of the library.
             demo

             # Sets the library as a shared library.
             SHARED

             # Provides a relative path to your source file(s).
             # Associated headers in the same location as their source
             # file are automatically included.

             src/main/cpp/demo.cpp)

find_library( # Sets the name of the path variable.
              log-lib

               # Specifies the name of the NDK library that
              # you want CMake to locate.
              log )

target_link_libraries( # Specifies the target library.
                       demo

                       # Links the target library to the log library  
                       # included in the NDK.  
                       ${log-lib} )  

其中,add_library中填写了三个参数:demo即为你的library的名称,第二个默认是SHARED,第三个比较重要,是你需要添加进来的c++源文件的路径,如果有多个.cpp文件,添加回车,继续在后面添加路径即可,如
src/main/cpp/demo.cpp
src/main/cpp/native_lib.cpp。
在target_link_libraries中的第一个参数即为你要指定的library。

3.在module的build.gradle中添加如图红框中的部分:
这里写图片描述

4.在你的代码中加入本地方法,如public native String stringFromJNI(),以及:

static{
    System.loadLibrary("demo");
}

即可。

讲到这里基本把AS的CMake的使用步骤说清楚了,接下来说两个碰到的异常及解决的方法:
异常1:
libc: Fatal signal 5 (SIGTRAP), code 1 in tid 19362

在开发的时候碰到了这个异常,经检查,是因为我在该返回函数结果的时候未写return,导致异常发生

JNIEXPORT jboolean JNICALL Java_..._init
        (JNIEnv* env, jobject obj, jdoubleArray array){
    init(env, array);
    return true; //加上后异常消失
}

以前用jni的时候没有写return也可以使用,现在看来是不行了。。

异常2:
出现java.lang.UnsatisfiedLinkError: No implementation found for native …
我在.cpp文件中用的是jobject,而在自动生成的.h头文件中却是jclass,于是将jclass全部替换成jobject就可以了。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u014390957/article/details/77338504

智能推荐

python实现yolo目标检测_Yolov5—实现目标检测(win10)-程序员宅基地

文章浏览阅读9.6k次,点赞5次,收藏38次。Yolov5—实现目标检测(win10)该方法可以在win10上实现Yolov5的目标检测,配置前需要安装Anaconda3一、环境配置源码下载地址:https://github.com/ultralytics/yolov5.git推荐使用B站up主修改好的文件配置Yolov5环境。(链接点这里:提取码为“ugpg”)Pytorch:1.5.1Cuda:10.1Python:3.7打开Anacon..._yolov5检测api

mktemp linux,Linux mktemp 命令使用方法-程序员宅基地

文章浏览阅读213次。原标题:Linux mktemp 命令使用方法Linux mktemp命令用于建立暂存文件。mktemp建立的一个暂存文件,供shell 使用。创建临时文件或者目录,这样的创建方式是安全的。此命令的适用范围:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。语法mktemp [-qu][文件名参数]参数:-q  执行时若发生错误,不会显示任何信息。-u ..._xbfi

API接口技术开发1688阿里巴巴alibabaAPI请求获取宝贝详情页数据、原价、销量、主图等参数可支持高并发调用接入演示-程序员宅基地

文章浏览阅读637次,点赞26次,收藏8次。请注意,由于1688的API可能会有调用频率的限制,因此在高并发场景下,你可能需要实现更复杂的逻辑来管理API密钥和访问令牌,以及处理API请求的排队和重试机制。此外,如果1688开放平台有提供特定的SDK,可以使用SDK来简化开发过程。

docker部署nginx_docker 部署nginx-程序员宅基地

文章浏览阅读1.2k次,点赞26次,收藏23次。本文讲述docker如何部署nginx的详细步骤和解释。_docker 部署nginx

PyCharm无法索引cannot find declaration to go to||CTRL+也不起作用(已解决)-程序员宅基地

文章浏览阅读9.9k次,点赞4次,收藏2次。如题所述,见下图问题解决很简单:方案一:file–>close project然后重新导入方案二:file–>settings–>project—>project interpreter绑定解释器方案三:真的是代码写错了,重新写一下,上级目录要带上...2018-12-14 22:15:18写于滨州市博兴县..._pycharm无法索引

十、卷积神经网络知识和二维卷积层计算(3.7学习笔记)_二维卷积后的参数怎么计算-程序员宅基地

文章浏览阅读519次。进入卷积神经网络学习_二维卷积后的参数怎么计算

随便推点

CSS中 设置( 单行、多行 )超出显示省略号_css超出显示...-程序员宅基地

文章浏览阅读10w+次,点赞46次,收藏121次。css设置超出显示省略号可分两种情况:但使用的核心代码是一样的:需要先使用 “overflow:hidden;” 来把超出的部分隐藏,然后使用“text-overflow:ellipsis;”当文本超出时显示为省略号。思路:1、使用 overflow:hidden; 语句不显示超过对象尺寸的内容,就是把超出的部分隐藏了;2、使用 -webkit-line-clamp: 行数; 语句限制显示文本的行数;3、使用 text-overflow:ellipsis; 语句用省略号“…”隐藏超出范围的文本说明_css超出显示...

Linux内存管理-浅谈物理内存与虚拟内存_linux 物理内存使用到80%的时候数据开始往虚拟内存转移-程序员宅基地

文章浏览阅读1.3k次,点赞2次,收藏3次。二 物理内存和虚拟内存我们知道,直接从物理内存读写数据要比从硬盘读写数据要快的多,因此,我们希望所有数据的读取和写入都在内存完成,而内存是有限的,这样就引出了物理内存与虚拟内存的概念。物理内存就是系统硬件提供的内存大小,是真正的内存,相对于物理内存,在linux下还有一个虚拟内存的概念,虚拟内存就是为了满足物理内存的不足而提出的策略,它是利用磁盘空间虚拟出的一块逻辑内存,用作虚拟内存的_linux 物理内存使用到80%的时候数据开始往虚拟内存转移

在数据库层面分析系统性能(原创)-程序员宅基地

文章浏览阅读301次。系统级别信息v$sysstat按照OracleDocument中的描述,v$sysstat存储自数据库实例运行那刻起就开始累计全实例(instance-wide)的资源使用情况。该视图存储下列的统计信息:1>.事件发生次数的统计(如:user commits)2>.数据产生,存取或者操作的total列(如:redo size)3>.如果TIMED_STATISTIC..._v$sysstat字段说明

c++配置libtorch_libtorch c++ param_groups-程序员宅基地

文章浏览阅读675次,点赞8次,收藏14次。CUDA版本最好选与本机一致的版本进行使用,但是我的经验告诉我即使下载的版本和电脑安装的CUDA版本不一致,但只要能兼容也可以使用。比如我下载的LIbTorch的CUDA版本是11.7但是电脑的CUDA版本是12.0,也是可以正常使用的,其中CUDA版本要大于等于LIbTorch的CUDA版本。把libtorch/lib中的所有dll放到libtorch/bin中,然后把libtorch/bin加到环境变量的path中.1、由于找不到xxx.dll,无法继续执行代码,重新安装程序可能会解决此问题。_libtorch c++ param_groups

PHP与ASP.NET:如何选择合适PHP?-程序员宅基地

文章浏览阅读353次。Are you a business owner looking for 您是正在寻找PHP web development services or ASP.Net development services, but unable to decide the right technology for your project? Are you looking for the PHP Web开..._网站 asp asp.net php如何选择

PIC16LC66-04I/SO 8位微控制器 -MCU 中文资料PDF参数-程序员宅基地

文章浏览阅读370次,点赞9次,收藏5次。工厂Lead Time:通常为4周 PIC16LC66-04I/SO是一种低功耗、高性能的8位CMOS微控制器,适用于各种嵌入式应用。PIC16LC66-04I/SO可以通过Microchip的MPLAB X IDE进行编程和调试。在使用该微控制器时,请务必查看其数据手册和参考手册,以了解其引脚定义、功能、应用电路图、电压和使用方法等详细信息。产品类型:8-bit Microcontrollers - MCU。器件名称:PIC16LC66-04I/SO。输入/输出端数量:22 I/O。

推荐文章

热门文章

相关标签