android studio 调试c/c++代码小记

使用的android studio3.0.1版本,sdk 27.

新建的测试程序,勾选了c++支持,默认有native_lib.cpp。

1.在cpp中添加了测试的native代码,提示No implementation found for错误,怎么看都跟之前的默认函数没啥区别啊,于是盯着简单cpp代码逐行扫描。。。。。5分钟后,我去,自动生成的代码extern c竟然没有跟{},所以默认函数享受了extern c,而我添加的测试代码被认为没有实现,这绝对是个坑啊。以上,添加{}问题解决。

2.executing external native build for cmake 错误,由于添加了其他的测试代码,准备进行一些模块功能测试,所以有了目录分层,所以相当于调整了CMakeLists.txt,然后就是各种错误,之前只关注了这个错误,并不太熟悉android studio的操作,然后就各种点点点,终于发现了在messages窗口,gradle sync中有CMake Error的提示,比如我的错误是提示cmakelists.txt中的哪一行出错的,在gradle console中有具体的错误,提示我好多cpp文件找不到,而这些文件正是我后添加在其他目录的文件,所以问题明显,源文件目录错误,编译器找不到。。。。。。以上,修改正确的目录层级,问题解决。

3.将已有c++代码导入,编译时提示各种标准库函数无法使用,比如std::to_string、make_unique等等,分两步,一个是因为没有使用c++标准库,需要参数arguments "-DANDROID_STL=c++_shared",一个是因为需要c++14支持,cppFlags "-std=c++14",这两问题个是查了资料:https://stackoverflow.com/questions/22774009/android-ndk-stdto-string-support

4.想要添加另一个依赖库代码,编译为android平台的so,报错:error: linker command failed with exit code 1 (use -v to see invocation),发现是生成的so与最终依赖库的位置写的名字不一致导致的。

5.因为之前的c++代码中有很多同事的中文注释,直接用到android studio中会提示encoding问题,这时候就需要在Settings--->Editor--->File Encodings中指定编码格式,点击右边的小加号,选择c++代码目录,出现在path中,后面的encoding中选择GBK,apply-->ok,会发现都能正确显示中文了。

6.需要release版本的库,选择窗口左下角的Build Variants,然后选择对应的Variant,当然,选择release之后会提示错误,需要配置签名,这个大家可以查查,有很多教程。

7.关于debug进入c/c++代码,找到了一个方法,edit configurations-->debugger-->symbol directories界面里,点击右边的小加号,将项目生成的中间.o文件目录添加进来,之后在c/c++代码加断点就可以进入调试了。

8.如果调试的手机或者平板没有全部的打印信息,让你无法调试自己的程序,可以网上查找对应型号的设备如何打开工程模式,因为工程模式可以打开log级别的设置,很多设备都将默认logcat级别设置的高一点,提高性能。

9.编译出来的so库比较大,查找资料,发现需要在cmakelists.txt中设置strip参数:

set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -s")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -s")

参考了https://stackoverflow.com/questions/38675403/how-to-config-cmake-for-strip-file,瞬间变小了。

10.使用的so库接口api,在jni接口中调用竟然提示error: undefined reference to,明明已经连接进去了为什么会出现这个问题呢,然后将接口extern到jni接口中,编译,依然报这个错误,查看与其他接口差异,发现问题:没有使用extern c属性,所以编译时不认识去哪里找接口,添加之后解决问题。

11.有一些平台差异的东西,希望在一份源码中同时维护,在cmakelist.txt中添加宏,方式就是:

add_definitions(-DANDROID),代表ANDROID宏,-D代表是defined

12.不同库函数有重名冲突的,可以在Cmakelists.txt中使用:

SET_TARGET_PROPERTIES (libxxx PROPERTIES LINK_FLAGS -Wl,--no-undefined,--version-script,${PROJECT_SOURCE_DIR}/xxx/export.map)

SET_TARGET_PROPERTIES (libxxx PROPERTIES LINK_FLAGS -Wl,--no-undefined,--retain-symbols-file,${PROJECT_SOURCE_DIR}/xxx/export.sym)

参考:https://www.2cto.com/kf/201703/610953.html

13.build variant无法切换debug和release的问题,应该是缓存问题,我尝试删除了.idea目录重新打开android studio就可以切换了。

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/487170.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在Mac(OS X)中使用GitHub的超详细攻略(20170706)

转自:http://blog.csdn.net/baimafujinji/article/details/74533992 GitHub是一个面向开源及私有软件项目的托管平台、开源代码库以及版本控制系统,因为只支持 Git 作为唯一的版本库格式进行托管,故名 GitHub。通常在Windows下使用GitHub的教…

低时延AI完美适配工业场景,边缘智能如何构建数字工业新生态?

物联网智库 原创二次转载请联系原作者今年年初爆发的新冠疫情迫使居民的生活、学习、工作由线下向线上大规模迁移,令各行各业意识到了数字化升级的重要性,纷纷踏上转型之路。联网设备数量也随着物联网技术的快速发展而不断飙升,越来越多的应用…

AndroidStudio 3.4更新了啥?(转载)

版权声明:本文为原博主收集的资料,欢迎参考。未经本人允许,禁止转载。 原博文地址:https://blog.csdn.net/z302766296/article/details/89468726 每次到AndroidStudio新版本发布的时候,都忍不住想更新一波,…

lintcode12 带最小值操作的栈

实现一个带有取最小值min方法的栈,min方法将返回当前栈中的最小值。 你实现的栈将支持push,pop 和 min 操作,所有操作要求都在O(1)时间内完成。 建一个栈helpStack,用来存放从开始到目前位置的最小值, 1 /**2 * lintc…

python使用的一些小事儿

简单的记录一些使用的小事儿,大神可能都知道,给自己这样的python新手使用。 1.os.path.realpath(__file__):获得当前文件路径 2.os.path.dirname(os.path.realpath(__file__)):获得当前文件的所在目录,每多一层os.pa…

图片缓存

转载于:https://www.cnblogs.com/cyruszhu/p/7995117.html

Nvidia真的收购Arm了吗?

来源:半导体行业观察综合自网络,谢谢。 近日有消息显示,Nvidia已成功达成收购Arm。但笔者通过翻阅外媒报道的原文中看,其实并非如此。据英国媒体EveningStandard报道,英伟达(NVIDIA)收购Arm已进…

鼓捣串口的一些记录

硬件忙不过来,让帮忙调试串口,并编写串口收发及监控程序。 第一个是使用的usb转串口,插到开发板上,到/dev下查看tty:ls -l tty*,发现确实有ttyUSB0,插拔一下,确认就是这个了&#x…

python基础--格式化输出

http://www.cnblogs.com/alex3714 #-*-coding:utf-8 -*- 字符编码声明 河南大学物理与电子学院 -----注释 三个三引号或者双引号 也可以作为长字符串赋值给变量2、 用户输入 username input ("username:")3、…

刘江川院士:边缘计算如何应对能源互联网的碎片化和复杂性? | CCF-GAIR 2020

来源:雷锋网作者 | 王刚雷锋网按:2020 年8月7日,全球人工智能和机器人峰会(CCF-GAIR 2020)正式开幕。CCF-GAIR 2020 峰会由中国计算机学会(CCF)主办,雷锋网、香港中文大学&#xff0…

C++: error: call of overloaded ‘abs(int)’ is ambiguous

今天跨平台编译项目,报错如题,使用的vs管理代码,所以直接查看abs定义,发现好多地方有实现,cmath、math.h、stdlib.h、cstdlib,然后都看了一遍之后,再看包含的头文件是stdlib.h和cmath&#xff0…

yum list失败

搭建了本地yum源,用yum list 测试报如下错误: [rootheguol ~]# yum list error: rpmdb: BDB0113 Thread/process ye67ww/139716328233400 failed: BDB1507 Thread died in Berkeley DB library error: db5 error(-30973) from dbenv->failchk: BDB0…

调查:人工智能技术的应用现状

本文最初发表在 Towards Data Science 博客上,经原作者 Luke Posey 授权,InfoQ 中文站翻译并分享。作者 | Luke Posey译者 | Sambodhi策划 & 编辑 | 刘燕随着工具和基础设施的成熟,应用人工智能不断加速发展。将这些基础设施与强大的人才…

adb 命令的个人记录

adb kill-server:杀掉服务, adb start-server:启动服务, adb install xxx.apk:安装apk,有时候会报错:adb: failed to install xxx.apk: Failure [INSTALL_FAILED_ALREADY_EXISTS: Attempt to …

LoRa VS NB-IoT,一场物联网时代C位争夺战

来源:脑极体我国5G商用已经一年多了,比起5G网络所带来的极致体验,我们对于西方世界因对5G网络的安全担忧所引发的一系列事件恐怕更加深有感触。美国跳脚、英国退网,中国在5G技术的领先深深刺痛了这些不可一世的西方大国。而原本可…

防止Linux库so中的接口冲突

使用vs编译so库,很多复用的cpp文件在不同的so中,调用这些so的时候会有崩溃等等各种问题,就是因为虽然复用了接口,但是内部实现不完全相同,而Linux使用接口又与windows不一样,导致不是理想状态使用自己库中的…

【MySQL】数据处理:从SQL批量删除报错到Python优雅解决

一、背景 MySQL数据库表中有一批重复的脏数据,为不影响正常业务,需要进行批量删除。 二、SQL批量删除 首先想到的是编写SQL语句来批量删除:删除身份证号为51****59且ID不为5的全部数据(保留ID为5的那一条数据) DELETE FROM test_table WHERE id IN ( SELECT i…

Beego 学习笔记9:Boostrap使用介绍

BootStrap布局 1> 下载地址: http://v3.bootcss.com/getting-started/#download 根据自己的需要,下载不同的版本。我这里使用的是1版本的。比较简单好用。 2> Bootstrap常用的布局样式介绍 1->布局容器(.container和.container-fluid&a…

windows的\r\n与Linux的\n

为了去除平台差异,需要将数据直接在Linux下保存,不在windows中进行转换,于是对\r\n和\n、\r有了新的认识,由于这部分数据保存的代码是其他两个同事约定好了格式的,windows保存的txt文件中使用了“\r\n”作为结束&#…

名人论数学——数学的本质

来源:算法与数学之美罗巴切夫斯基任何一门数学分支,不管它如何抽象,总有一天会在现实世界中找到应用.罗巴切夫斯基(Н.И.лобачевский,1792~1856,俄国数学家)是非欧几何的创始人之一&#xff0c…