NDK撩妹三部曲(三)—美女,我看你婀娜多姿,宛若天仙,这本“ndk排错指南”就送你了
从何说起?
昨天算是真正的带妹子入坑了,这不,又给我买奶茶了。
But,路漫漫其修远兮,没过两天,妹子就又来找我了。“Q哥,我最近碰到一些问题,麻烦你帮我看一下呗”? 妹子是个聪明人,又补充道“餐厅新开了一家麻辣烫,下班请你吃”。呵,我大丈夫岂能为了份麻辣烫而折腰?“有冰封没?”,我问道。俗话说,人不要脸,天下无敌,为了不辜负妹子的厚望,我决定拿出久封的必杀秘籍,“NDK排错指南”。
正文
问题1:QT 无法在android环境下导出事件循环,导致信号槽无法使用,QTSocket无法使用
解决方案:so 库的运行线程取决于上层调用方的线程,但是 so 库内部也可以创建工作线程,因此需要上层对so库返回的内容处理(尤其是工作线程的回调)
问题2:UDP/TCP 等接受数据时 char* 转 std::string 不指定长度会偶现被\0截断
解决方案:1、使用QT封装类QByteArray 2、指定数据长度
问题3:ndk默认char为无符号,和windows不一致,导致在计算校验和时在不同平台表现不一致
解决方案:设置gcc选项,指定ndk默认char为有符号,和windows一致
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsigned-char")
问题4:linux下setsocket 有个入参是 (void*),结果传入 bool值,在windows OK,但是因为是 C 函数,导致在linux下入参错误,UDP 无法广播
解决方案:不传bool,传入int值
问题5:Cmake 启用 C++ 17 支持 编译警告
解决方案:添加预定义宏:
add_definitions(-D _SILENCE_CXX17_ITERATOR_BASE_CLASS_DEPRECATION_WARNING)
add_definitions(-D _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS)
问题6:编译so库时提示:C1128: 节数超过对象文件格式限制: 请使用 /bigobj 进行编译
解决方案:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /std:c++latest /bigobj")
问题7:编译so库时报错:error: undefined reference to ‘inflate’
解决方案:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -lz")
问题8:编译so库时报错:error: undefined reference to ‘bsd_signal’
解决方案:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__ANDROID_API__=16")
问题9:编译的so库要支持5.0以上
解决方案:修改变量 D__ANDROID_API__ > 20
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__ANDROID_API__=21")
问题10:编译的so库体积太大
解决方案:so 库体积优化
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ffunction-sections -fdata-sections -s -Ofast")
问题11:java.lang.UnsatisfiedLinkError: dlopen failed: library “libtest.so” not found
解决方案:这个问题有好几种原因:
- 运行的设备和库的abi不匹配
- android 代码中load时写错库的名字
- 有多个 abi 文件夹,但是库的数量不一致
- gradle 中的 abiFilters 和实际文件夹不匹配
- System.loadLibrary 时带上了so库的"lib"前缀
- 编译 so库的时候看看 cmake 有没有将所有的头文件和 cpp 文件add_executable 进去
- 尝试使用其他版本(建议使用更高的版本)的ndk去编译so库
- 自己编译的so库还有其他的依赖库没有拷贝
其他的具体问题具体分析了。
问题12:IOS 锁屏或者进入后台后 so库的 socket 被系统干掉,导致无法发送数据
解决方案:在 app 进入后台时杀死 socket,进入前台重新创建 socket 对象,SO_LINGER 选项可以保证端口立即被释放,不然端口不能被立即释放,可能会停留在 time_wait。
struct linger linger;linger.l_onoff = 1;linger.l_linger = 0;int ret = setsockopt(usock,SOL_SOCKET, SO_LINGER,(const char *) &linger,sizeof(linger));
问题13:int 、bool等默认值在android和windows下不一致
解决方案:int、bool等基础类型进行初始化,不然编译器会给它搞个非法值
问题14:默认情况下ndk不支持C++异常捕获
解决方案:设置开启异常支持
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fexceptions")
问题14:Android api24以下getifaddr 和 freeifaddrs 函数缺失
解决方案:
1、set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__ANDROID_API__=24")
2、手动添加这两个函数(可从网上下载)
问题15:提前掌握tcdump adb抓包
解决方案:
#手机需要root。
#清除文件
adb shell rm /sdcard/capture.pcap
#推送tcpdump到手机
adb push D:/tcpdump /data/local/tcpdump
cd /data/local
#开始监听
./tcpdump -i any -p -s 0 -w /sdcard/capture.pcap
#拉取抓包文件使用wireshark打开
adb pull /sdcard/capture.pcap
注意:不能在shell下执行这个命令
如果提示:adb: error: failed to copy 'tcpdump' to '/data/local/tcpdump': remote Permission denied
首先进入此目录,su ,root用户,chmod赋予权限,然后再从shell出来,执行push
问题16:Android api24以下getifaddr 和 freeifaddrs 函数缺失
解决方案:
1、set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -D__ANDROID_API__=24")
2、手动添加这两个函数(可从网上下载)
附上下载地址:
ifaddrs 下载地址:https://download.csdn.net/download/u012534831/12495592
问题17:JNI 报错 More than one file was found with OS independent path ‘META-INF/ASL2.0’
解决方案:这是因为引用的jar包里面的 asl2.0 协议冲突,需要删掉一个。
找见两个冲突的jar包,解压jar包,找见jar文件中META-INF下的ASL2.0文件,.删除掉ASL2.0文件,在打包剩下的文件,最后把.zip的后缀换成.jar,拖到项目运行。
问题18:JNI 报错 More than one file was found with OS independent path ‘META-INF/ASL2.0’
解决方案:这是因为引用的jar包里面的 asl2.0 协议冲突,需要删掉一个。
找见两个冲突的jar包,解压jar包,找见jar文件中META-INF下的ASL2.0文件,.删除掉ASL2.0文件,在打包剩下的文件,最后把.zip的后缀换成.jar,拖到项目运行。
问题19:qtcreator for android: 报错:D:\Java\android-ndk-r20/toolchains/x86-4.9/prebuilt/windows-x86_64/lib/gcc/i686-linux-android/4.9.x/…/…/…/…/i686-linux-android/bin\ld: error: cannot find -lc++
解决方案:来到红框目录下,将libc++.so.16复制一份重命名为libc++.so。
问题20:Android studio 中 sdk-tools 中没有 cmake 选项
解决方案:取消http代理(选择:no proxy)
暂时记录这么多,后面持续补充。
csdn地址:http://blog.csdn.net/u012534831
github地址:https://github.com/qht1003077897
如有帮助,请多多点赞支持
NDK撩妹三部曲(三)—美女,我看你婀娜多姿,宛若天仙,这本“ndk排错指南”就送你了相关推荐
- NDK撩妹三部曲(一)—站住同学,我这有个C++的so库,底层运算效率飞起,想不想要?
NDK撩妹三部曲(二)--论"Android 实战如何使用 C++(Qt) so 库这个神秘武器?"之带妹实战篇 从何说起? 前段时间,公司有个前端妹子找到我说:"Q ...
- NDK撩妹三部曲(四)—NDK 开发如何优雅的定位 Native 异常,看这篇就够了
NDK 开发如何优雅的定位 Native 异常,看这篇就够了 从何说起? 摘要 案例实操 aaddr2line objdump ndk-stack 1.假设我们已经通过 adb logcat 拿到了程 ...
- python撩妹技能_干货必看 | 手把手教你用Python撩妹
今天我们不讲专业知识,我们来讲讲,如何用Python做个撩妹小程序,考虑到有些小白没有深入的学习过Python,我给大家整理个初阶小白也可以做出来的程序,画颗爱心. 以下是代码: 1 from tur ...
- 敌我差距:普通男生感动自己,撩妹高手感动女生。
"我感动天感动地,怎么感动不了你,明明知道没有结局却还死心塌地:我感动天感动地,怎么感动不了你,总相信爱情会有奇迹"这或许是我这么久以来见过的最屌丝的一句歌词了. 确实有很多人都相 ...
- 有创意的撩妹句子,句句有创意,拿去撩妹准没错!
有创意的撩妹句子一. 1.如果说最奢侈的事,我愿用我整个青春去等你. 2.你还小,我不忍心跟你谈恋爱. 3.我可能缺席了你的过去,但我希望你不要缺席我的未来. 4.再累,再苦,再疼,也只是为了你能喜欢 ...
- OSChina 周一乱弹 ——一起来看片,美女教你怎么撩妹
2019独角兽企业重金招聘Python工程师标准>>> @sunny_chan : #我是歌手#老狼<礼物>泪奔了-我知道那时代回不去了-很多很多-珍惜当下,珍惜身边人- ...
- 程序员撩妹神操作,看完我是绝望的!
看什么看!点我呀! 全栈程序员,免费入门到精通! 作者丨圈T社区 提醒:本文不是为了黑程序员,我本身也是程序员,本文章只是为了给大家周末愉快放松一下~ 每一个程序员都很有实力:他们有的笔试面试全AC, ...
- 大三学生独自破解逆天AI模型:我只是把撩妹的时间,都用来研究机器学习了...
问耕 发自 雁栖湖 量子位 出品 | 公众号 QbitAI GPT-2,一个逆天的AI. 今年2月,OpenAI首次对外公布了这个模型的存在.GPT-2写起文章来文思泉涌毫无违和感,无需针对性训练就能 ...
- 不会聊天?不会撩妹?宅男如何走出自闭的循环圈
曾经的我 曾经的我,被称为撩妹高手,情圣,哲学家.那是高中时代吧,整天无心向学,只知道撩妹子,手机里存了很多女生的号码和QQ,本班的.隔壁班的.大我一届的,小我几届的都有,甚至有个妹子才刚刚小学毕业. ...
最新文章
- C#实现动态生成Word
- 浪潮存储双活方案:新疆道路运输管理局的大数据应用不再是梦
- Java内存体系结构(模型),垃圾回收和内存泄漏
- 国家开放大学2021春1118机电一体化系统设计基础题目
- python猜名词甲乙丙_用python实现了一下:甲乙两人互猜数字(数理逻辑)
- 一份值得收藏的ACL 2020参会笔记:重要论文与NLP领域的发展趋势解读
- PHP中PDO方法fetch参数问题
- XSS扫描器编写思路
- html添加js的代码注释,JavaScript 注释方法总结
- python 的request包使用介绍,以one two three zero six为例
- UVA-816 Abbott's Revenge (bfs)
- 一个端到端的机器学习项目全纪录(加州房价预测)
- 计算机辅助制造系统英文,计算机辅助集成制造系统,computer-aided integrated manufacturing system,音标,读音,翻译,英文例句,英语词典...
- 文华财经基本函数及语法
- JS写一个简单的五星评价
- Oracle触发器(当A表新增/修改/删除时,同步数据到B表)
- INDEMIND带你玩转OpenCV4.0(一):DIS光流算法解析
- 求出1-n之间的素数(质数)
- 使用LamdbaUpdateWrapper的setSql作用及风险
- Android中如何检测重力感应变化:Sensor和SensorManager
热门文章
- 搜索引擎从入门到精通之五 国内篇(转)
- CAutoupdater通用自动升级组件
- 音箱有电流声的解决办法(转)
- 聚名网:又一终端大七位收购BG.cn!现已作为官网启用!
- 神武服务器物品开放,【神武】新区具有指导价值的攻略-神武4电脑版官方论坛-多益网络...
- 标签类目体系的价值与意义
- 深圳市福田区中心区 市民中心航拍全景
- iPad os 常用快捷键集合
- 手机模拟蓝牙手柄控制kobuki底座
- 广东专插本有计算机专业的学校,2021年广东专插本有哪些学校 哪几所通过率更高...