前两篇介绍了cocos2d-x 下linux开发环境配置和android 环境配置问题。在这其中遇到很多问题,所以最后一篇分享一下在处理这些问题时,我是如何解决的,是怎么想的。同时总结一些解决这类问题的方式。避免少走弯路。首先通过问题列表的形式来回答一下部署遇到的基本问题。
一、问答列表
1、ubuntu下不能识别手机问题
    这是因为android sdk 中 platform-tools下大adb没有权限访问设备的信息,所以在设备管理器中显示一堆乱码,解决这个问题的方式就是通过su权限去关闭和开启服务。但是一定要注意两次操作都要用sudo,才可以。adb的目录为: sdk/platform-tools/  下,如果你不知道我说的那个sdk的话请移步这篇文章。执行命令为:
sudo ./adb kill-server
sudo ./adb start-server
2、NDK_ROOT 查找不到问题,ADB not responding
    这两个问题其实是一个问题,NDK_ROOT 需要配置在~/.bashrc下。这个就是相当于windows下大user path,配置在这里,每个用户都可以访问到这个变量。是否配置好了需要通过echo $NDK_ROOT验证,若果正确打印出来,说明配置没有问题。但我在运行工程目录下的bulid_native.sh时,始终提示在找不到NDK目录下的
make程序,但是cd到对应目录是可以找到的。到这里令人非常郁闷,就先抛下这个问题。继续查找ADB not responding 的问题,后来找到了问题的关键(https://developer.android.com/sdk/installing/index.html)。原来我是64的系统,所以必须安装一个包。安装好后一切都正常了。包括NDK_ROOT的问题,估计在没安装这个包的时候,是系统找不到正确版本的make程序。安装ia32-libs的命令如下:
apt-get install ia32-libs
3、程序如何识别编译环境问题
    其实这个问题已经困扰我很久,只不过没有遇到这个问题前一直没有深究,在加载eclipse linux项目的时候我选择的编译器是cross gcc,系统默认的。就没有过多注意。结果悲剧就来了。引擎始终识别不了平台类型。问了好友小胖同学,小胖告诉我代码里判断平台代码。其实就是知其所然,不知其所以然。通过看源代码,发现引擎是通过查找系统CC_TARGET_PLATFORM。而这个值是通过编译器来查找的。所以必须选择linux
gcc,才会CC_TARGET_PLATFORM = LINUX。这也是检测平台很好的方法。
4、引用lib问题
     在android工程里需要包含lib文件,其实就是通过ndk将cocos2d的几个库打包成了java可以调用的库。这个容易理解,可以直接把包含lib文件的工程导入进来,也可以直接将生成的lib文件拷贝到自己的lib库文件夹里就可以了。
5、引用头文件问题
     这个问题比较简单,只不过是cocos2d-x自己的目录结构不够好而已。本来 引用coscos2dx根目录就可以了,但是由于cocos2d.h放在根目录的include文件下。要知道编译器在编译阶段根据是<>和""分别去系统目录查找头文件和当前目录查找头文件,如果有目录包含也是以当前目录去查找。后来想了想,也许cocos2dx的目的是不要包含根目录,而是去根目录查找。只要包含cocos2dx所在目录就可以了。从cocos2dx在inlcude所在的目录就明白了。
6、模拟器问题
      模拟器其实问题不大,要注意android sdk的版本,如果和模拟器的版本对不上,就会报错。同时模拟器出现异常,重启是个好方法。因为模拟器这东西不能对其期望太高。何况真机android平台各种假死,异常屡见不鲜。如果配置的模拟器不能满足需求,不要重新编辑保存,而是直接删除重建。因为我编辑保存后,在运行游戏的时候还是报异常,后来在stackoverflow 找到这种问题的处理办法就是删除模拟器,新建模拟器。
二、最终的思考
     通过这一系类的折腾,部署好了环境。现在看我在这写文章很轻松,其实我自己在处理这些问题并不轻松。所以我在想为啥会遇到这些问题?如何避免这种问题发生。因为在之前很多的开源项目,在我部署的时候也是问题重重。
     1、linux 并不是大众平台,从一个好用的输入法就可以看出来。要知道这些商业公司,对mac os开发了很多好用的日常软件,但没有linux的。更是说明了,商人都是围绕利益出发的,这是核心。就如三体里面的宇宙丛林法则。不管说的多么好,法则是不会变的。
     2、互联网的资料存在太多的噪音,这也是我不爱看电子书的原因,很多电子书都包含大量的错误,大脑里装了太多错误的知识,在你选择的时候,它们就发挥作用了。用女朋友的话说,就是烟囱口上招手,往黑道上引啊。
     3、对自己所用的平台并没有认真的分析。网上好多资料都是32位系统的,包括android sdk 并没有区分操作系统的架构体系。所以需要装补丁。在下载android sdk的时候其实说明页面是有提到64位ubuntu系统问题的。但可恶的是折叠了这部分东西。
     4、对编译器,操作系统理解的不够深刻。比如说上面提到的cocos2dx是如何判断平台的,大家都知道引擎可以自己判断,那到底如何判断的呢?其实对编译器熟悉的话,都知道不同的编译器会定义自己的符号,通过检测编译符号就知道是什么平台。
     5、并没有将自己的已知的知识很好的应用,其实对于相对路径,系统查找文件的方式,都很清楚,但遇到问题的时候还是怀疑这些,这就像化学反应中,要控制住不变量,才能得到实验结果。但是自己内心一乱,把这些正确的东西也改的不对了,增加了正确方向的可变因子。做人也一样,要确认自己的优势,以及能力。这样才能做到比较正确的抉择。可变因子变少了,意味着干扰因素少了。成功的概率就提高了。
三、参考资料

ubuntu下搭建cocos2dx编程环境-下的更多相关文章

  1. ubuntu下搭建cocos2dx编程环境-中

        上篇文章里讲了在ubuntu下部署cocos2d-x开发环境,这篇文章主要示范在ubuntu下部署cocos2d-x android开发环境.分开写就是因为我看很多文章里都将这两件事情混杂着写 ...

  2. ubuntu下搭建cocos2dx编程环境-上

        这大半年一直在开发flash游戏,用到的编程语言是actionscript和c++.所以这次公司决定开发手游端的话,C++不是很生疏,这是个好消息.坏消息是由于现在网页游戏还没有上线,所以公司 ...

  3. windows环境下搭建Cocos2d-X开发环境

    最近终于有时间可心搞搞自己的东西了,呵呵,那就开始做个手机小游戏给孩子玩吧. 首先必须选定开发的框架,移动终端开源的游戏框架貌似不多,找来找去也就这个了,名字简单Cocos2d-X,是Cocos2d国 ...

  4. ubuntu下搭建gtk+编程环境

    首先gtk+项目主页为: http://www.gtk.org/ gtk+现在有2和3两种版本,使用 sudo apt-get install gnome-core-devel 可以一次性安装2个版本 ...

  5. 在windows下搭建汇编编程环境

    汇编语言程序搭建masm+debug 下载链接 dosbox:链接:https://pan.baidu.com/s/1TgkfU-d5w6Nz9TOYro1pYw 密码:mp83 masm:链接:ht ...

  6. mac 下搭建php 编程环境全过程

    1,打开终端, 设置root密码sudo passwd root输入密码 2, 安装 apachemac 自带apache 启动apachectl start重新启动apachectl restart ...

  7. ubuntu 中 搭建 C编程环境

    在 ubuntu 中 使用 快捷键 Ctrl + Alt + T 打开 终端 在终端输入 gcc 查看 有没有安装 gcc (c语言的编译器) ( 我这里是 已经 安装 好的 ) 进行 安装 gcc ...

  8. Ubuntu 12.04下搭建Qt开发环境

    http://download.qt.io/official_releases/qt/ Ubuntu 环境下Gtk与Qt编译环境安装与配置(系统环境是Ubuntu 12.04) 1.配置基础开发环境G ...

  9. Ubuntu系统下搭建Python开发环境

    之前演示了在Windows中安装Pycharm,很简单.下面介绍一下如何在Ubuntu中安装Pycharm 1.更新Python至3.5.1,执行以下命令: sudo add-apt-reposito ...

随机推荐

  1. Java Day 11

    异常 Throwable 子类 Error.Exception  Error - 不可以处理 Exception - 针对性处理 原理 自定义异常 异常类的抛出throws 先检查语法错误,后检查逻辑 ...

  2. 用cmd命令合并N个文件

    今天早上朋友发我一篇小说(42个TXT文件),让我给他合并为一个文件.我首先想到的是“Copy”命令,它可以复制文件,也可以合并文件. 例如:合并1.txt和2.txt到12.txt(其为ASCII文 ...

  3. c++事件内核对象(event)进程间激活(转)

    源出处:http://blog.csdn.net/richerg85/article/details/7538493 此文主要说明的是,c++中创建的一个事件内核对象可以在不同的程序(进程)间共用,也 ...

  4. 转载 SQL Server 2008 R2 事务与隔离级别实例讲解

    原文:http://blog.itpub.net/13651903/viewspace-1082730/ 一.事务简介 SQL Server的6个隔离级别中有5个是用于隔离事务的,它们因而被称作事务隔 ...

  5. js如何获取select下拉框的value以及文本内容

    select下拉框在项目开发中是经常用到的,特别是在联级菜单方面的应用更为广泛.但是,对于一些初学者来说,如何获取下拉框子节点option的value值和文本内容,还是有一点难度的.其他的就不说了,现 ...

  6. 细究UTF-8,GB2312及ISO-8859-1区别

    各个国家和地区所制定的不同 ANSI 编码标准中,都只规定了各自语言所需的“字符”.比如:汉字标准(GB2312)中没有规定韩国语字符怎样存储.这些 ANSI 编码标准所规定的内容包含两层含义:1. ...

  7. sql中having的使用

    where 和having有什么区别? where 是group by之前进行筛选,having是group by 之后进行统计的筛选,一般having会和group by一起使用,结合聚合函数,统计 ...

  8. cygwin chmod 失效

    问题背景 为了在 Cygwin 下使用之前最喜爱的 screen 命令, 安装 Cygwin 时就选上了 screen 来运行一把 ganiks.liu@MAMIS-Gaiks-Liu /tmp $ ...

  9. 使用HTML5中postMessage实现Ajax中的POST跨域问题

    HTML5中提供了在网页文档之间相互接收与发送信息的功能.使用这个功能,只要获取到网页所在窗口对象的实例,不仅仅同源(域+端口号)的web网页之间可以互相通信,甚至可以实现跨域通信. 浏览器支持程度: ...

  10. 【BZOJ】【3166】【HEOI2013】Alo

    可持久化Trie+set Orz zyf…… 搞区间中次大值不好搞,那么我们就反过来,找一个数,然后看它在哪些区间里是次大值…… (然而事实上我们并不用真的把这个区间具体是什么找见,只要知道它可以跟哪 ...