您的位置:首页 > 编程语言 > C语言/C++

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

2014-04-30 14:23 225 查看
http://blog.csdn.net/wenrenwang/article/details/9980753
__int64找不到符号

采用int64_t来代替:

#if defined(__ANDROID__)

typedef int64_t __int64;

#endif

<sys/io.h>找不到
android下不需要直接引用该文件,用下面的宏去掉即可

#if !defined(__APPLE__) && !defined(__ANDROID__)

#include <sys/io.h>

#endif

SO_NOSIGPIPE找不到
SO_NOSIGPIPE在mac中存在,可惜在android中不存在。请使用MSG_NOSIGNAL来代替

#if defined(__ANDROID__)

#define SO_NOSIGPIPE MSG_NOSIGNAL

#endif

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

S_IREAD、S_IWRITE或者__S_IREAD、__S_IWRITE找不到
请用S_IRUSR、S_IWUSR代替

pthread_cancel找不到
这个android并未实现,有一些替代方法,具体见:http://bbs.rosoo.net/thread-10289-1-1.html

getifaddrs, <ifaddr.h> 找不到

android并没有实现。不过谢天谢地,有人已经帮我们实现了。感谢一下他:
https://github.com/kmackay/android-ifaddrs
<sys/statvfs.h>找不到

请用此来代替:

#if defined(__ANDROID__)

#  include <sys/vfs.h>

#  define statvfs statfs

#else

#  include <sys/statvfs.h>

#endif

Android ndk c++加入stl支持

本人使用ndk r9,目前最新版的ndk. 加入stl支持的方法为:

在androi工程/jni目录下新建一个Application.mk,加入以下一行,就可以使用stl的多个库了。

[plain] view
plaincopy

APP_STL := stlport_static  

之后重新编译ndk-build

再重新编译工程即可。

另外,stlport_static是使用stl静态库,也可以采用stlport_shared来使用.so,如果使用动态库,在java中需要先System.loadLibrary("stlport_shared")才能使用。

建议直接使用静态库即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: