从何说起?

  昨天算是真正的带妹子入坑了,这不,又给我买奶茶了。
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排错指南”就送你了相关推荐

  1. NDK撩妹三部曲(一)—站住同学,我这有个C++的so库,底层运算效率飞起,想不想要?

    NDK撩妹三部曲(二)--论"Android 实战如何使用 C++(Qt) so 库这个神秘武器?"之带妹实战篇 从何说起?   前段时间,公司有个前端妹子找到我说:"Q ...

  2. NDK撩妹三部曲(四)—NDK 开发如何优雅的定位 Native 异常,看这篇就够了

    NDK 开发如何优雅的定位 Native 异常,看这篇就够了 从何说起? 摘要 案例实操 aaddr2line objdump ndk-stack 1.假设我们已经通过 adb logcat 拿到了程 ...

  3. python撩妹技能_干货必看 | 手把手教你用Python撩妹

    今天我们不讲专业知识,我们来讲讲,如何用Python做个撩妹小程序,考虑到有些小白没有深入的学习过Python,我给大家整理个初阶小白也可以做出来的程序,画颗爱心. 以下是代码: 1 from tur ...

  4. 敌我差距:普通男生感动自己,撩妹高手感动女生。

    "我感动天感动地,怎么感动不了你,明明知道没有结局却还死心塌地:我感动天感动地,怎么感动不了你,总相信爱情会有奇迹"这或许是我这么久以来见过的最屌丝的一句歌词了. 确实有很多人都相 ...

  5. 有创意的撩妹句子,句句有创意,拿去撩妹准没错!

    有创意的撩妹句子一. 1.如果说最奢侈的事,我愿用我整个青春去等你. 2.你还小,我不忍心跟你谈恋爱. 3.我可能缺席了你的过去,但我希望你不要缺席我的未来. 4.再累,再苦,再疼,也只是为了你能喜欢 ...

  6. OSChina 周一乱弹 ——一起来看片,美女教你怎么撩妹

    2019独角兽企业重金招聘Python工程师标准>>> @sunny_chan : #我是歌手#老狼<礼物>泪奔了-我知道那时代回不去了-很多很多-珍惜当下,珍惜身边人- ...

  7. 程序员撩妹神操作,看完我是绝望的!

    看什么看!点我呀! 全栈程序员,免费入门到精通! 作者丨圈T社区 提醒:本文不是为了黑程序员,我本身也是程序员,本文章只是为了给大家周末愉快放松一下~ 每一个程序员都很有实力:他们有的笔试面试全AC, ...

  8. 大三学生独自破解逆天AI模型:我只是把撩妹的时间,都用来研究机器学习了...

    问耕 发自 雁栖湖 量子位 出品 | 公众号 QbitAI GPT-2,一个逆天的AI. 今年2月,OpenAI首次对外公布了这个模型的存在.GPT-2写起文章来文思泉涌毫无违和感,无需针对性训练就能 ...

  9. 不会聊天?不会撩妹?宅男如何走出自闭的循环圈

    曾经的我 曾经的我,被称为撩妹高手,情圣,哲学家.那是高中时代吧,整天无心向学,只知道撩妹子,手机里存了很多女生的号码和QQ,本班的.隔壁班的.大我一届的,小我几届的都有,甚至有个妹子才刚刚小学毕业. ...

最新文章

  1. C#实现动态生成Word
  2. 浪潮存储双活方案:新疆道路运输管理局的大数据应用不再是梦
  3. Java内存体系结构(模型),垃圾回收和内存泄漏
  4. 国家开放大学2021春1118机电一体化系统设计基础题目
  5. python猜名词甲乙丙_用python实现了一下:甲乙两人互猜数字(数理逻辑)
  6. 一份值得收藏的ACL 2020参会笔记:重要论文与NLP领域的发展趋势解读
  7. PHP中PDO方法fetch参数问题
  8. XSS扫描器编写思路
  9. html添加js的代码注释,JavaScript 注释方法总结
  10. python 的request包使用介绍,以one two three zero six为例
  11. UVA-816 Abbott's Revenge (bfs)
  12. 一个端到端的机器学习项目全纪录(加州房价预测)
  13. 计算机辅助制造系统英文,计算机辅助集成制造系统,computer-aided integrated manufacturing system,音标,读音,翻译,英文例句,英语词典...
  14. 文华财经基本函数及语法
  15. JS写一个简单的五星评价
  16. Oracle触发器(当A表新增/修改/删除时,同步数据到B表)
  17. INDEMIND带你玩转OpenCV4.0(一):DIS光流算法解析
  18. 求出1-n之间的素数(质数)
  19. 使用LamdbaUpdateWrapper的setSql作用及风险
  20. Android中如何检测重力感应变化:Sensor和SensorManager

热门文章

  1. 搜索引擎从入门到精通之五 国内篇(转)
  2. CAutoupdater通用自动升级组件
  3. 音箱有电流声的解决办法(转)
  4. 聚名网:又一终端大七位收购BG.cn!现已作为官网启用!
  5. 神武服务器物品开放,【神武】新区具有指导价值的攻略-神武4电脑版官方论坛-多益网络...
  6. 标签类目体系的价值与意义
  7. 深圳市福田区中心区 市民中心航拍全景
  8. iPad os 常用快捷键集合
  9. 手机模拟蓝牙手柄控制kobuki底座
  10. 广东专插本有计算机专业的学校,2021年广东专插本有哪些学校 哪几所通过率更高...