CentOS 7下编译FBX SDK示例时的”cannot find -luuid”问题

在Linux环境下尝试编译FBX SDK中的samples时,最后链接时出现”cannot find -luuid”,查了下文档发现这个uuid库是linux下生成唯一id用的那么一个库,起初以为是少了什么lib或者devel之类的,于是用yum开始安装,结果libuuid、uuid-devel都装上了还是不行,于是又都逐一卸载掉,查看ld的search path,在/lib64/下找到了:

lrwxrwxrwx. 1 root root 16 4月 7 22:35 /lib64/libuuid.so.1 -> libuuid.so.1.3.0
-rwxr-xr-x. 1 root root 20032 4月 1 01:37 /lib64/libuuid.so.1.3.0

用yum确认了下,也确实是已安装有这个uuid相关的库以及include等,于是怀疑是符号链接的问题,试了下用

ln -s libuuid.so.1 libuuid.so

建立libuuid.so的符号链接,重新make,成功通过并生成了sample的执行文件。

PS: FBX SDK的sample中的MakeFile将CC和LD设置成了gcc4,这个在我的CentOS7下会找不到(默认安装的应该都是),于是直接删掉了4。

对于Android NDK编译器ARM和Thumb模式的理解及Toolchain的切换clang编译器

以前在做Symbian的时候,曾经研究过ARM CPU的指令集问题,ARM处理器支持两套指令集,即ARM和Thumb。ARM为32位指令集而Thumb为16位指令集,理论上32位可以提供更快的执行速度但会生成更大的二进制执行文件,而16位的Thumb则恰恰相反,省地儿但慢,这也正是体现出了ARM对于嵌入式设备的专业性。对于我这种牺牲一切换速度的理念来说,当时就留下了ARM就比Thumb快的印象,以致于现在在做Android NDK原生开发时,也是优先用ARM指令集。(这个可以通过在Android.mk中加入LOCAL_ARM_MODE := arm控制,默认情况下NDK使用Thumb指令集)

但是最近在Xcode编译iOS项目时,注意到同为ARM处理器的苹果设备,使用的是Thumb指令集,而且好像还是某种新版本的Thumb指令集,小搜索了一下看到有人说这种armv7引入的叫做Thumb-2的指令集要比arm指令集更好!于是又重新搜索更新了一下大脑知识库…

Continue reading…

对Unity3D的iOS导出插件XUPorter的plist处理功能的改进

XUPorter

是一个可以在U3D生成iOS所需Xcode项目时自动完成一些如添加framework,修改编译参数等操作的Editor插件。这个插件对于同一个项目需要接入各种不同渠道的SDK生成对应IPA的需求可以很方便快捷的实现自动化操作,降低项目维护复杂度。
在使用这个插件时,发现了些小问题,查看作者声明时发现其已经不在对这个插件进行维护了,于是只好自己动手做一些修改完善:
本文记录的就是对plist的处理功能,原代码逻辑中XCProject.cs中的ApplyMod函数会根据.projmods的信息对Xcode项目文件进行一系列的修改,其中一部是对项目.plist的修改,但这一步用我当时取到的github最新版本时会出错,仔细检查了下,发现无论projmods中的plist段写不写,生成对应的XCMod对象的plist总会是null,检查了下这个json数据解析生成类,发现plist的类型是“Hashtable”,而不像其他一些字段,如group是string,libs是ArrayList等,改换了下projmods中的json写法,又发现虽然可以解析成功不为null了,但实际修改plist逻辑又出现了问题,原逻辑是通过XCPlist的Process函数对projmods中提供的信息项对原项目plist进行合并修改,但是代码中对各种plist选项的处理不并完善,只有一个特殊if:

		public void AddPlistItems(string key, object value, Dictionary<string, object> dict)
		{
			Debug.Log ("AddPlistItems: key=" + key);
			
			if (key.CompareTo(PlistUrlType) == 0)
			{
				processUrlTypes((ArrayList)value, dict);
			}
			else
			{
				dict[key] = HashtableToDictionary<string, object>((Hashtable)value);
				plistModified = true;
			}
		}

会对URLSchemes做处理,显然这样无法实现通用的plist修改逻辑,思考过后我决定将其实现改为读取指定plist文件中的key项并与项目plist进行合并,覆盖已有的项,添加没有的项,具体实现如下:
Continue reading…

博客服务器IP更换,忘记修改CDN源站地址,失误了!

最近发现PV急速下滑,虽然原来也不高吧,但至少还有点搜索引擎排名靠前的关键字,这两天却没啥访问了,仔细想想原来是前几天主机提供商更换服务器IP,只改了DNS上的,看来下百度站长上的一堆抓取异常才意识到原来忘记修改专门给搜索引擎用的CDN的源地址了,真是失误!

Unity3D中LoadLevelAsync异步加载场景的延迟切换问题

Unity中,对于异步加载场景的方式,脚本文档中有一定的解释和示例代码:http://docs.unity3d.com/ScriptReference/Application.LoadLevelAsync.html
其默认情况下,会在异步加载完成后立即切换到目标场景,但有些时候,需要在切换完成时先做一些操作,比如更新UI显示,释放资源等,也就是延迟切换场景的时间,这时就需要用到LoadLevelAsync返回值AsyncOperation的allowSceneActivation属性,将其置为false后,就不会立即切换场景了,但是有一个小问题就是,引擎底层对于这个逻辑的处理会变为,场景加载完成后,AsyncOperation的isDone以及progress都不会是正常的完成标记,也就是true和1.0,而是false和0.9,所以在需要手动置allowSceneActivation为true切换场景的位置的加载完成逻辑判断方式也需要调整为progress的0.9了。

居然被Adsense警告了

发布商不得诱导用户在无意中点击 Google 广告,也不得设法让用户过分关注广告单元

加了这么长时间的文字小箭头就被警告了,我这乡下小博这点PV居然也会被警告,无语。

Unity3D使用MonoDevelop进行开发时的项目编译问题

自从VS2015出现以后,Unity3D的新版本也直接内置了对其支持,写代码和调试都非常方便,但是在没有VS2015的开发环境下,比如没装或者是装不了(Mac OSX)下,用Unity自带的MonoDevelop也还算方便。
这次记录的是一个之前太注意的小问题,C#脚本中写了个带默认参数的函数,结果发现Unity编辑器可以编译运行,但在MonoDevelop调试时却提示编译错误,检查了下,发现原来是默认用MonoDevelop调试时,这个IDE也会对打开的项目进行编译,但其编译的方式和Unity本身不太一样,对这些后加入支持的代码写法并不支持,解决方法也很简单:Tools->Options->Unity->Debugger->Build project in MonoDevelop,这个选项勾掉就可以了。

PS2港版90006安装Mars Pro GM-816HD直读的总结(bios 230主板GH-072-42替换Super-7 E17)

之前一直怀着对PS2的敬仰之情,在最末期的时候入手了全新的港版9W,既是为了收藏,也是为了怀旧一些经典游戏(包括PS1游戏,虽然有PSP吧,但总是没有感觉,一个人玩,没有震动等等…)。最近盘算着入手PS4的时候又想起了把吃了很久灰的PS2拿出来怀旧一下,偶然发现a9上关于PS2的黑科技一直在进步,比如OPNPS2LD+SMB这个新科技,基本已经很好的解决了9W没法做硬盘机的问题了,不用刻盘还是非常方便的!后来又发现论坛上一致认为9W最具性价比的直读:Mars Pro GM-816HD,主要看中的是能让9W支持记忆卡启动这点,否则为了用SMB得先用工具盘引导,进ulaunchelf,再运行OPNPS2LD,然后进游戏,进入的游戏可以用IGR的话还好,不可以的话换个游戏可是要等上一段时间的。

说是安装816HD,其实购机的时候还是装过直读的,当时的JS称装的是Pro7-III,由于购自某宝(店铺现已消失…),外加当时也不太懂直读的各种功能,拿到后试了几个送的D版游戏没问题就放心了,虽然之后想看DVD的时候没有成功,但也没太在意。

各处查资料后发现PS2的大部分直读焊接点都是差不多的,也看到有人说Pro7-III和816HD焊点都是一样的,结果拆开确认时发现直读装的是Super-7 E17:

IMG_0724

接着又找了很多816的接线图,发现还是有几个点位不太一样的(PS:9W的结构实在是太简单了,拆之前还找了很多7W的拆机视频,看着还觉得有点门道,结果拆自己的9W时,发现上盖一开,拿掉电源,拿掉光驱,拿掉风扇就剩主板了…不过要注意光驱的、电源开关等的排线,插拔时要小心,看起来就很薄脆的样子),不过觉得难度比较大的几个点位都一样,最终还是20几块入了816HD,准备打造个完美的90006,经过大概快10次左右的拆装、重新焊接、测试操作,最终实现了心愿,这里记录下过程中遇到的一些问题,因为发现虽然816的各种图纸、评测、改机资料不少,但是是GH-072-42型号主板的资料确实不多,改造期间遇到问题时主要也是四处找相关参考资料,比如别人焊好后的照片,看各种有疑问的点位等。
Continue reading…

OpenWRT下libv4l的编译问题(uClibc++、stdc++相关)

最近研究路由器上的摄像头监控,要用到libv4l2的库,结果用OpenWRT SDK编译时却遇到了问题,路由器cpu是MT7620A,用的SDK是OpenWrt-SDK-ramips-for-linux-x86_64-gcc-4.8-linaro_uClibc-0.9.33.2,用./scripts/feeds安装了libv4l后,直接make报错:

In file included from v4l2-compliance.cpp:37:0:
v4l2-compliance.h:25:18: fatal error: cerrno: No such file or directory
 #include <cerrno>

看了下,是c++写法下的errno头文件找不到,V=s看了详细日志,-I的头文件搜索路径里确实没有cerrno,但是这个文件确实存在于这里:staging_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2/usr/include/uClibc++/,也就是说-I少了个带uClibc++的路径,看了半天sdk里的各种.mk,也没找到什么配置参数方面的玄机,可又不想傻加上个-I,或者都改成errno.h,于是开始搜索…
Continue reading…