linux程序(C++)由32位移植到64位的过程,还在尝试中,大侠勿喷,多多指点啊。。。

项目配置:linux(32位Suse)+  数据库(32位 Sybase)+ tomcat

新平台:linux(64位Suse)+  数据库(64位 Sybase)+ tomcat

先说环境搭建的问题:

 第一步:在新平台安装CMake和ftp-server工具。(这个纯百度就可以搞定了)

第二步:因为项目引用了C++ Poco开源库,所以在项目移植过去后会报错说Poco的动态链接库不兼容导致链接失败。网上对这方面的讲解也比较多,这里我试了一下,觉得应该是由于项目中引用的动态链接库是32位的导致的问题,所以毫不犹豫的去Poco官网下了源码,自己在64位Suse上编了一遍新的动态链接库,替换后,问题解决了。编动态库的时候很简单,Poco官网下源代码以后,直接make即可。

第三步:Poco的动态库连接了以后才发现,64位Suse上的Sybase竟然被人给删掉了(用户名还在)。。。然后就开始安装64位Sybase,用的硬盘直接安装,挨千刀的竟然提示无法图形化安装,只能./setup -console 安装,Sybase的安装教程也没用了,自己摸索着好歹是装完了。

第四步:还以为这下万事大吉,哪知道在编译的时候会链接到Sybase的动态库libsybcs.so,更奇怪的是这次没说不兼容,而是说找不到!我用find命令发现的确是有的,想想应该是路径的问题了,于是export PATH = ..................  export LD_LIBRARY_PATH = ..............   奇怪的是还不行!CMake编译的时候还是提示找不到libsybcs.so,再次求助万能的CSDN,发现了.bashrc, 64Suse下找了一把,竟然连这个文件也没有,于是去32Suse上直接copy了过来。于是。。。

第五步:于是。。。shit!竟然还不行!这次报错说是libsybcs.so不兼容!没天理了啊。。。难道要配个32位Sybase的动态库? 还在尝试中。。。大家给点意见

今天有进展了,昨天头昏了,竟然没发现还有一个库叫做libsybcs64.so。。。果断将CMakeLists修改。终于编过了。

第六步:这就开始考研我的细心和耐性了,对照着Poco的源代码和编译报错的位置,开始改吧!有函数调用不对的(例如 copyStream,64位下应该调用copyStream64),各种类型转换的。。。总之慢慢改慢慢调就是了。

第七步:终于都编译链接过了(无视warning,话说在32位的时候就有很多警告,历史遗留问题,不想动)。运行的时候竟然报了一个莫名其妙的错误:找不到libPocoFoundation.so.12 。 话说这个链接在32位Suse上就没有配过,64位Suse上也没有在CmakeLists里改过有关的东西。这可如何是好? 继续研究吧。。。

原先项目中是会对动态库建链接的,链接的名字是*.so.8;现在不知道为什么链接的时候开始找后缀为 12的了,我把shell脚本里所建链接名字后缀改为*.so.12,就没有问题了。

第八步:话说,终于编译链接全部通过了!程序名为sss_Agent,可是一运行就coredump了,debug core文件,悲催的

sss_agent: malloc.c:3096: sYSMALLOc:Assertion `(old_top == (((mbinptr) (((char *) &((av)->bins[((1) - 1) *2])) - __builtin_offsetof (struct malloc_chunk, fd)))) && old_size ==0) || ((unsigned long) (old_size) >= (unsigned long)((((__builtin_offsetof(struct malloc_chunk, fd_nextsize))+((2 * (sizeof(size_t))) - 1)) & ~((2 *(sizeof(size_t))) - 1))) && ((old_top)->size & 0x1) &&((unsigned long)old_end & pagemask) == 0)' failed.

没话说了,改代码吧。。。还在头疼中,不知从何下手啊。。。


                                  


你可能感兴趣的:(Linux,Poco,Sybase)