在我移植0.49和0.53时,体现得非常充分。
2. 在移植过程中,为了保证顺利通过编译,每个版本都需要进行多处修改,而且每个版本修改的地方也不一样,有意思的是,和0.53相比,0.49需要修改的地方相对较少,移植过程也更加容易。
3. 修改的方式五花八门,最简单的就是gcc和VC在C++语法支持上的细节差异,这个相对简单,相信每一个有代码平台迁移经验的人都会遇到这样的问题,再有就是冲突问题,比如libmemcached在一个枚举中包含TRUE、FALSE、ERROR、FLOAT和SOCKET这样的枚举成员,不幸的是,它们与windef.h中定义的宏和typedef冲突了,因此我不得不将枚举中的TRUE改为TRUE1,以此类推。在修改中最让我担心的是需要直接注释掉一些Windows中不包含的头文件,而这些文件在Mingw32中也没有提供。
4. 调试相对困难,事实上在这次迁移0.53的最后,我通过在libmemcached相应的函数中添加printf函数,输出调试信息,最终定位并修复了Socket连接的问题,但是整个过程非常繁琐,因为libmemcached是通过gcc编译的,因此无法在VC的工程中进行调试。当然,基于VC的测试用例在gdb下调试libmemcached也是可以的,对于习惯使用IDE的人来说,通过命令行方式调试第三方类库,其难度可想而知。
5. 说了这么多,最终的结果只有一个,Linux下继续享用libmemcached和memcached服务器给我们带来的成就感,也感谢他们的开发者无私的奉献。至于libmemcached for Windows?希望他的作者Mrs Brian Aker能够在未来的版本中予以足够的关注,也期望libmemcached 1.0版本在发布时能够提供VC++的工程文件。
八、结束语:
希望这两篇文章不仅仅是让您了解了更多关于libmemcached的细节,授人以鱼,不如授人以渔,更希望的是与您分享我在基于不同平台迁移C/C++代码的经验。如果您有更好的方法或技巧,欢迎指正,让我们来共同提高。总之,分享是快乐的。
作者 Stephen_Liu