移植android ndk c++各种兼容性问题

在将C++代码移植到Android NDK过程中,遇到了一系列兼容性问题,如__int64符号未定义,<sys/io.h>头文件缺失,SO_NOSIGPIPE宏找不到,uint64_t等类型不识别,S_IREAD和S_IWRITE常量无法定位,pthread_cancel函数缺失,getifaddrs和<ifaddr.h>头文件不支持,以及<sys/statvfs.h>头文件不存在。这些问题都对移植工作构成了阻碍。
摘要由CSDN通过智能技术生成
  1. __int64找不到符号
采用int64_t来代替:
#if defined(__ANDROID__)
typedef int64_t __int64;
#endif

  1. <sys/io.h>找不到
android下不需要直接引用该文件,用下面的宏去掉即可
#if !defined(__APPLE__) && !defined(__ANDROID__)
#include <sys/io.h>
#endif

  1. SO_NOSIGPIPE找不到
SO_NOSIGPIPE在mac中存在,可惜在android中不存在。请使用MSG_NOSIGNAL来代替
#if defined(__ANDROID__)
#define SO_NOSIGPIPE MSG_NOSIGNAL
#endif

  1. uint64_t, int64_t, uint32_t, int32_t等类似类型找不到
请检查你的头文件包含,将系统的头文件放在自已的头文件之前。因为你自己的头文件有可以定义了重复的类型,导致系统头文件出错。

  1. S_IREAD、
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值