Android NDK交叉编译问题与解决策略
需积分: 16 84 浏览量
更新于2024-09-13
收藏 896KB PDF 举报
"NDK交叉编译问题小记主要涵盖了在使用JNA方式编译C/C++项目时遇到的问题及相应的解决策略,特别涉及到在arm-linux-androideabi工具链下进行交叉编译的常见困难。文档作者指出,对于Android API级别28及以上,需要在pthread.h文件中添加特定的pthread_attr_setinheritsched和pthread_attr_getinheritsched函数声明。此外,还提到了在Tools.cpp文件中修改__sched_priority为sched_priority,以符合新的编译器路径下的定义。另外,为了兼容性,abs函数被替换为fabs,并引入了<cmath>头文件。在文件处理方面,将条件判断fp=fopen(pic_name,"wb")<0改为了fp=fopen(pic_name,"wb")==NULL。对于时间相关的头文件,需要在调用全局头文件global.h时修改相应名称。在遇到libc6-dev、gettext安装或重装问题时,作者尝试了sudo apt-get install libc6-dev以及brew的相关操作,但未解决问题。最后,解决找不到sys/fcntl.h头文件的方法是使用find命令搜索NDK中的缺失文件位置。"
详细说明:
1. **pthread.h的修改**:在使用Android API级别28及以上时,由于系统接口的变化,需要在pthread.h中添加pthread_attr_setinheritsched和pthread_attr_getinheritsched的函数声明,这两个函数与线程调度属性有关。
2. **Tools.cpp的调整**:在Tools.cpp源码中,作者发现__sched_priority与新的androideabi编译器路径下的sched.h中定义的不一致,因此将其更改为sched_priority。
3. **数学函数转换**:原始代码中的abs函数在某些情况下可能不被支持,因此需要替换为标准库提供的fabs函数,并引入<cmath>头文件。
4. **文件操作改进**:当打开文件失败时,原代码使用的是fp=fopen(pic_name,"wb")<0来判断,但更标准的做法是使用fp=fopen(pic_name,"wb")==NULL来检查文件打开是否成功。
5. **头文件引用问题**:部分文件名需要根据实际情况进行调整,例如时间相关的头文件,以确保编译时能找到正确的引用。
6. **库安装和重装尝试**:作者尝试通过sudo apt-get install libc6-dev和brew命令来安装或重新安装库,但这些操作并没有解决问题,表明可能是其他原因导致的编译错误。
7. **缺失头文件的查找**:当遇到找不到sys/fcntl.h头文件的问题时,可以使用find命令在NDK目录下搜索,找到正确的位置并引用。
NDK交叉编译时可能会遇到各种问题,包括兼容性、函数声明、库依赖等,需要开发者具备对C/C++和Android NDK的深入理解,以便能够诊断并解决这些问题。文档中的解决方法为遇到类似问题的开发者提供了一定的参考。
2020-09-30 上传
2013-12-24 上传
2013-03-06 上传
2018-03-30 上传
2019-06-28 上传
2013-01-17 上传
2020-11-24 上传
2020-03-13 上传
DIANZI520SUA
- 粉丝: 1151
- 资源: 28
最新资源
- Android圆角进度条控件的设计与应用
- mui框架实现带侧边栏的响应式布局
- Android仿知乎横线直线进度条实现教程
- SSM选课系统实现:Spring+SpringMVC+MyBatis源码剖析
- 使用JavaScript开发的流星待办事项应用
- Google Code Jam 2015竞赛回顾与Java编程实践
- Angular 2与NW.js集成:通过Webpack和Gulp构建环境详解
- OneDayTripPlanner:数字化城市旅游活动规划助手
- TinySTM 轻量级原子操作库的详细介绍与安装指南
- 模拟PHP序列化:JavaScript实现序列化与反序列化技术
- ***进销存系统全面功能介绍与开发指南
- 掌握Clojure命名空间的正确重新加载技巧
- 免费获取VMD模态分解Matlab源代码与案例数据
- BuglyEasyToUnity最新更新优化:简化Unity开发者接入流程
- Android学生俱乐部项目任务2解析与实践
- 掌握Elixir语言构建高效分布式网络爬虫