linux程式(C++)由32位移植到64位的過程,還在嘗試中,大俠勿噴,多多指點啊。。。

來源:互聯網
上載者:User

項目配置: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.

沒話說了,改代碼吧。。。還在頭疼中,不知從何下手啊。。。


                                  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.