ndk 编译 c++ 兼容性问题汇总整理
转自:http://blog.csdn.net/wenrenwang/article/details/12003671
1.__int64找不到符号
#if defined(__ANDROID__)
typedef int64_t __int64;
#endif
2.<sys/io.h>找不到
android下不需要直接引用该文件,用下面的宏去掉即可
#if !defined(__APPLE__) && !defined(__ANDROID__)
#include <sys/io.h>
#endif
3.SO_NOSIGPIPE找不到
#if defined(__ANDROID__)
#define SO_NOSIGPIPE MSG_NOSIGNAL
#endif
4.uint64_t, int64_t, uint32_t, int32_t等类似类型找不到
5.S_IREAD、S_IWRITE或者__S_IREAD、__S_IWRITE找不到
6.pthread_cancel找不到
7.getifaddrs, <ifaddr.h> 找不到
8.<sys/statvfs.h>找不到
#if defined(__ANDROID__)
# include <sys/vfs.h>
# define statvfs statfs
#else
# include <sys/statvfs.h>
#endif
转自:http://www.52rd.com/Blog/Detail_RD.Blog_DamonKabo_68286.html
在下载编译android源码的过程中,将碰到的问题整理如下:
一.
frameworks/base/include/utils/KeyedVector.h::: error: ‘indexOfKey’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
frameworks/base/include/utils/KeyedVector.h::: note: declarations in dependent base ‘android::KeyedVector<android::String8, android::sp<AaptDir> >’ are not found by unqualified lookup
frameworks/base/include/utils/KeyedVector.h::: note: use ‘this->indexOfKey’ instead
make: *** [out/host/linux-x86/obj/EXECUTABLES/aapt_intermediates/AaptAssets.o] Error
解决办法:
引起此问题的大致原因是编译器是不识别某些nonconformance code,解决办法是在相应位置加上-fpermissive来屏蔽编译器对此类代码的排斥。
frameworks/base/tools/aapt/Android.mk
Add '-fpermissive' to line 31:
LOCAL_CFLAGS += -Wno-format-y2k -fpermissive
但是继续报错:cc1plus: warning: unrecognized command line option "-Wno-format-y2k-fpermissive"
解决办法:
这类错误是找不到所需要的库文件:cannot find -lxxxxx ,其中lxxxxx代表的是libxxxxx.so,引起的原因一般有两个方面:
a)由于.so是编译临时生成的文件,如果前面的文件编译出错,libxxxxx.so没有生成,就会报错。
b)由于本机环境所造成的:
三.
host C++: obbtool <= frameworks/base/tools/obbtool/Main.cpp
<command-line>:0:0: error: "_FORTIFY_SOURCE" redefined [-Werror]
frameworks/base/tools/obbtool/Main.cpp:1:0: note: this is the location of the previous definition
cc1plus: all warnings being treated as errors
make: *** [out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o] Error 1
解决办法:
原因是GCC版本太高,需要吧GCC版本修改为4.4.6
sudo apt-get install gcc-4.4
sudo apt-get install g++-4.4
在ubuntu上将默认的GCC和G++版本改为4.4使用以下命令
2.sudo ln -s /usr/bin/gcc-4.4 /usr/bin/gcc
四.
target thumb C++: libmedia <= frameworks/base/media/libmedia/MediaScanner.cpp
frameworks/base/media/libmedia/MediaScanner.cpp: In function ‘bool android::fileMatchesExtension(const char*, const char*)’:
frameworks/base/media/libmedia/MediaScanner.cpp:84: error: invalid conversion from ‘const char*’ to ‘char*’
frameworks/base/media/libmedia/MediaScanner.cpp:90: error: invalid conversion from ‘const char*’ to ‘char*’
make: *** [out/debug/host/linux-x86/pr/sim/obj/SHARED_LIBRARIES/libmedia_intermediates/MediaScanner.o] Error 1
解决办法:
因为GCC4.4版本在编译时不支持const char* 和char*的转换,在其它的GCC版本上应该都能编译过。具体解释http://gcc.gnu.org/gcc-4.4/porting_to.html
frameworks/base/media/libmedia/MediaScanner.cpp:84&90:
-char*
+const char*
五.
development/simulator/app/DeviceManager.cpp:8: fatal error: wx/wxprec.h: No such file or directory
compilation terminated.
development/simulator/app/DeviceWindow.cpp:8: fatal error: wx/wxprec.h: No such file or directorymake: *** [out/host/linux-x86/obj/EXECUTABLES/simulator_intermediates/DeviceManager.o] Error 1
ubuntu13.04无法支持libwxgkt2.6-dev 所以需要安装高版本的wx2.8
解决办法:
apt-file search wxprec.h
sudo apt-get install wx2.8
wx-config --cflags
六.同步内部环境
. build/envsetup.sh
lunch
Lunch menu... pick a combo:
1. generic-eng
2. simulator
3. full_passion-userdebug
4. full_crespo-userdebug
choose 2
make -j4
转自:http://blog.csdn.net/xiaominghimi/article/details/7637530
本篇介绍在Cocos2dx中加入网络通信相关代码,然后编译到Android时出现的一些细节和需要注意的地方总结。不多废话了,直接进入正题;
1. 首先介绍在Cocos2dx中使用pthread编译时应注意:
由于NDK明确指明不支持 pthread_cancel() 函数,编译的错误提示如下:
解决方案:
使用 pthread_kill() 或者 return NULL; 两种方法进行解决。
其中的区别如下:
pthread_exit() : 可以指定返回值,以便其他线程通过 pthread_join() 函数获取该线程的返回值;
return: 在线程函数中使用 return,会退出线程;
这里Himi推荐使用 return ,直接 return NULL;
2. 编译提示找不到 sockaddr_in 与 htons等定义,错误提示如下:
出现此类问题,主要是头文件没有加入,虽然在ios编译环境不抱错,但是编译会出现此问题。
解决方案:
在使用这些函数的类中,加入如下两个头文件:
- #include "netdb.h"
- #include "netinet/in.h"
3. Curl.h 头文件找不到。注意,这里是编译出现头文件找不到的问题,如果你是xcode编译找不到头文件请参考如下博文:(这里讲解的是在ndk编译android过程中出现此类问题的解决办法)
【C/S通信交互之Http篇】Cocos2dx(Client)使用Curl与Jetty(Server)实现手机网游Http通信框架(内含解决curl.h头文件找不到问题)
先观察错误的日志:
解决方案:
在你使用curl的类中,虽然导入了curl类,那么你肯定是include “curl/curl.h”导入的吧!OK,改变如下即可,指定到完整相对路径即可:
- "../../libs/cocos2dx/platform/third_party/ios/curl/curl.h"
4. 有时候编译报错,错误提示说 curl_global_init 、curl_easy_init、curl_easy_setopt等没有定义undefined !这个问题是因为没有加入curl关联lib包;错误提示如下:
解决方案:
修改jni下的helloworld下的.mk文件,整个路径如下:
your project//android/jni/helloworld/Android.mk
打开整个mk文件,找到如下内容:
修改成如下内容:
其实就是添加了两句话!但是要注意!
你仔细看添加的第一句下面一句中间的符号,之前是 “ := ”现在是 “+=” 一定要注意,这个问题困扰Himi好几个小时 = =。
OK,基本这些足够解决问题的啦~
ndk 编译 c++ 兼容性问题汇总整理的更多相关文章
- [Android-NDK编译] ndk 编译 c++ 兼容性问题汇总整理
1.__int64找不到符号 采用int64_t来代替: #if defined(__ANDROID__) typedef int64_t __int64; #endif 2.<sys/io.h ...
- Android Studio 中关于NDK编译及jni header生成的问题
之前由于工作原因使用grails这个基于groovy的框架做项目,对groovy感觉很好. 基于groovy的gradle构建系统对我而言自然也是好的没得说. Android Studio 正式版出来 ...
- 浅谈独立使用NDK编译库文件(Android)
阅读前准备 这是一篇相对入门的文章.文中会涉及到少许NDK的知识,但个人认为对初学者来说都相对比较实用,因为都是在平时项目中遇到的(目前自己也是初学者).一些其他高深的技术不再本文探讨范围之内(因为我 ...
- Kettle日常使用汇总整理
Kettle日常使用汇总整理 Kettle源码下载地址: https://github.com/pentaho/pentaho-kettle Kettle软件下载地址: https://sourcef ...
- 使用ndk编译c可执行程序
1.创建工程目录 在ubuntu系统下搭建好ndk编译环境,创建test目录 mkdir test 在test目录下创建jni目录 cd test mkdir jni 2.编写源代码 vim hel ...
- 微信小程序(应用号)资源汇总整理
微信小应用资源汇总整理 开源项目 WeApp - 微信小程序版的微信 wechat-weapp-redux-todos - 微信小程序集成Redux实现的Todo list wechat-weapp- ...
- Android APP使用NDK编译后的ffmpeg库出现undefined reference to 'posix_memalign'错误
在android程序中使用NDK编译后的ffmpeg库的时候出现了如下错误: jni/libs/libavutil.a(mem.o): in function av_malloc:libavutil/ ...
- Linux下NDK编译FFMPEG包含neon参数
FFMPEG编译成Android库已经有很多案例了,编译优化neon的也很多,以下是我通过实践成功的案例,这里主要讲编译的配置文件,其他设置可结合Linux下使用NDK编译FFMPEG(libstag ...
- Linux下使用NDK编译FFMPEG(libstagefright)
这个月要负责一个项目,使用FFMPEG渲染视频,主要是Android端的,由于性能要求,要使用硬解码,但网上大多数教程都是没有libstagefright的,所以个人觉得,生成的so库文件也是没有开启 ...
随机推荐
- Codeforces Round #222 (Div. 1) D. Developing Game
D - Developing Game 思路:我们先枚举左边界,把合法的都扣出来,那么对于这些合法的来说值有v 和 r两维了,把v, r看成线段的两端, 问题就变成了,最多能选多少线段 使得不存在这样 ...
- Linux-数据库1
数据库介绍 数据库(database,DB)是指长期存储在计算机内的,有组织,可共享的数据的集合.数据库中的数据按一定的数学模型组织.描述和存储,具有较小的冗余,较高的数据独立性和易扩展性,并可为各种 ...
- 网页后门工具laudanum
网页后门工具laudanum laudanum是Kali Linux预先安装的Web Shell工具.它支持多种Web后台技术,如ASP.ASP.net .JSP.PHP.Coldfusion.它提 ...
- 运用jquery做打印和导出操作
我最近接手的项目中经常让做出打印和导出统计图和表格 首先说打印,打印如果用echarts做出来的图表,打印的时候,要借助jquery的打印插件. 打印插件: <script src=" ...
- NYOJ 298 点的变换 矩阵乘法
http://acm.nyist.net/JudgeOnline/problem.php?pid=298 最好还是自己手推一下矩阵式子..不算太难..但是有一些小知识.... 首先当然是矩阵的细节.. ...
- 【尺取法好题】POJ2566-Bound Found
[题目大意] 给出一个整数列,求一段子序列之和最接近所给出的t.输出该段子序列之和及左右端点. [思路] ……前缀和比较神奇的想法.一般来说,我们必须要保证数列单调性,才能使用尺取法. 预处理出前i个 ...
- 压测工具Webbench
webbench最多可以模拟3万个并发连接去测试网站的负载能力,安装使用也特别方便,并且非常小. 1.系统:Linux 2.编译安装: [root@~]$wget http://blog.s135.c ...
- [转载]C++内存管理
[导语] 内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的检查代码和对C++的痛恨,但内存管理在C++中无处不 ...
- Velocity模板学习(一)
一.Velocity是什么 Velocity是一个基于Java的模板引擎,允许任何人仅仅简单地使用模板语言就可以引用由Java代码编写的对象. 二.Velocity的基本语法 1.变量 变量的定义 在 ...
- Java高级架构师(一)第42节:应用上Nginx过后的体系结构
以后的架构思考方向: 体系结构的演变