2008-12-17 110 views
4

我將負責移植從Solaris到Linux平臺相當大的C++網絡應用程序代碼庫。該代碼還使用ACE等第三方庫。最初編寫的應用程序並未計劃在未來可能的移植。將應用程序從Solaris移植到Linux

我想得到一些建議和建議,我如何去完成這項任務。什麼是最好的方法要遵循。

-Prabhu。 S

回答

6

「有沒有這樣的事,作爲一個便攜式的應用程序只有被移植的應用程序」

首先下手,利用這兩個平臺上相同的工具,如果你能。 I.E.如果Solaris版本沒有被更改爲使用GCC和GNU make等,我建議你先改變它,讓Solaris構建工作。您會發現您將首先修復編譯器問題,而不是試圖在嘗試移植應用程序的同時在Linux上修復它們。

其次確保您可以在相同版本的每個平臺上獲得所有相同的庫。我認爲你可以得到ACE for Linux。確保該版本的庫適用於Solaris。這會限制兼容性問題。

一旦你完成了那麼真正的工作就開始了。

您將需要一次一個地編譯每個源文件,並找到Linux中不可用的函數。首先尋找可在兩個操作系統中使用的替代品。如果沒有簡單的替換,則創建兩個用於Solaris的庫和一個用於Linux的庫。創建包裝類或函數以將不兼容性抽象出來。

如果這聽起來像很多工作 - 它是。

7

由於ACE是多平臺的,因此ACE是一個優勢。您必須檢查您的字體大小在何處以及如何使用。如果使用了ACE_ *基本類型,那麼您正在創建一個條帶,因爲這些條目是可移植的,否則我會先將Solaris版本更改爲使用多平臺數據類型和元素(使用ACE工具,因爲您已經具備了該類型)。

如果您使用的是任何僅限於Solaris的外部庫,則必須在Linux中找到一個等價物並編寫一個包裝,以便應用程序的其餘部分不需要知道正在使用哪個實現。

之後,只需一個代碼庫即可直接遷移到Linux。你應該完全編譯和測試它。

1

列出您當前的外部依賴關係。在Linux上查找這些內容。對於那些不是,你必須找到替代品。如果對這些外部依賴關係的引用沒有被抽象到函數或對象的後面,那麼就重構代碼。然後替換依賴關係,以便可以使用替換實現抽象函數。

1

我同意David Allan Finch寫的東西。一步一個腳印。另外:

您是來自Solaris/SPARC還是Solaris x86?如果它是x86,那麼您將沒有endian問題,但如果它是SPARC,則需要檢查代碼以確保沒有字節順序(endian)問題。

Solaris代碼是32位還是64位?當然保持地址空間最初一樣。

相關問題