項目配置: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.
沒話說了,改代碼吧。。。還在頭疼中,不知從何下手啊。。。