Windows到Linux——移植新浪微博开放平台客户端(C++)到Linux
看微博这么火,也试试这新浪微博开放平台,发现给了C++版客户端,还给了测试例子,可是没有区分出Linux平台和Mac平台,就这么尝试下把这个客户端程序移植到Linux下运行看看。不过也不是完全盲目,还是看到人家给的SDK资源下有着Linux目录和Mac目录,说明应该再编写的时候也考虑到了平台的迁移。再看看代码很多地方对Win32、Wince有区分,但也没有那么完全(后来编译的时候发现的。)
目前的情况是测试例子是能跑了,所需的库也有了,但是最初没有仔细看下代码,导致运行还是有很多问题,先贴个图:
是在Debian下运行的,以后有需要了再慢慢改吧!这里就是记录下常见的Windows到Linux移植时自己碰到的问题,以及自己认为的应该有的一些步骤(主要以c++语言来说),纯属个人经验,还是那句老话,新人作为参考,行家还望多指教。
(1)分析库
拿到一个Windows平台的程序,首先对这个程序的文件目录结构有个大致的了解,功能作用的不多说,看看该应用程序的依赖库,不管静态的动态的,是自己可以动手编译的,还是都已经给好了,如果是前者那么你后续的工作则可以进行,否则可能只能放弃了。可以看到新浪微博的这个客户端还是给出了部分库的依赖关系,而且也部分进行了说明,能够发现都是基于开源软件来做的,包括xml解析,ssl、libcurl等,其实看到这,再看到源码里的宏,至于为什么没有给Linux平台的版本还是难以理解的,难道是人员和时间的问题???好了,现在就可以分析下各个库之间的相互依赖问题了。微博SDK中的README这样写到“一共分为两个工程组
Weibo.common
Weibo.sdk
Weibo.common
libhttp - 实现基本的HTTP请求封装,依赖库:libcurl-7.21.1.
libjson - 修正了中文的JSON解析问题,可以用该库来解析WEIBO SDK返回的JSON格式
Weibo.SDK
Weibo 实现了微博开放平台基本的业务操作,具体操作流程请参考test工程,依赖库:libhttp
test 微博操作例程。依赖库:libWeibo”
好,那我们就从Weibo.common工程开始,先编译出libhttp,再编译Weibo库,最后是测试程序test。至于这里面还有的库依赖关系,大家可以自己分析下。
(2)分析代码
我一开始看到源码里大量的宏定义来区分不同的平台,以为只要按照依赖库熟悉一个个编译就OK了,结果还是有很多地方需要自己修改来适应,而且即使出来了,似乎还是有些,问题,因此只好反过来再看看源码了,所以应该再编译之前就先分析下,看看源码有没有针对性的,比如要是直接MFC程序,那就悲催了。在刚编译新浪微博客户端时看到了BOOL以及LPCTSTR等类型,以为完了,还好只是用部分类型定义。然后就是在编译的过程中可以将一些针对Windows平台的类型进行转换,这里提几个很常见的,算是自己的记录了,以后方便查看,仅供参考,测试不对请留言告知,万分感谢:
a.对于__int64类型,typedef long long int __int64
b._atoi64()函数,可以使用aoll()
c.Windows 下的GetTickCount 函数功能:GetTickCount返回(retrieve)从操作系统启动到现在所经过(elapsed)的毫秒数,它的返回值是DWORD。Linux下 <time.h> clock_gettime CLOCK_MONOTONIC:从系统启动这一刻起开始计时,不受系统时间被用户改变的影响
d.?:三目条件运算符,在vs环境下发现允许是void类型,而gcc则直接认为错误,需要注意
e.error: expected template-name before ‘<’ token,万一冒这么个错误,可能是c++的模板问题,gcc对模板编译进行严格检查的,最后补全类作用域::。
好了,先这么多吧,自己的还没有完全测试成功呢,只是小记录下,以后要是完全可以了,再把详细的补全。