[英]porting linux 32 bit app to 64 bit?
我要將非常大規模的應用程序移植到64位,我注意到在網上有一些文章顯示了這個移植的許多陷阱,我想知道是否有任何工具可以幫助移植到64位,意味着找到需要更改的代碼中的位置....也許啟用了警告的gcc ......它是否足夠好? 有更好的嗎 ?
編輯:伙計們我正在尋找一個工具,如果有任何可能是完整的編譯器,我知道GCC可以asist,但我懷疑它會找到所有不便攜的問題,
將在運行時發現....也許靜態代碼分析工具,強調移植到64位?
謝謝
一個好工具叫做grep
;-) do
grep -nH -e '\<int\>\|\<short\>\|\<long\>' *
並用適當的替換所有這些基本整數類型的所有裸使用:
size_t
uintptr_t
prtdiff_t
uintN_t
等等,我可能忘記了一些。 那么帶有所有警告的gcc
會告訴你。 你也可以使用clang
作為編譯器,它提供了更多的診斷功能。
首先,為什么要“移植”?
考慮到大多數發行版在十多年內都快樂地提供了32位和64位變體。 因此,除非你以真正不可移植的方式編程(而且你幾乎要嘗試),你應該沒問題。
在64位操作系統中編譯項目怎么樣? gcc編譯器看起來像這樣的工具:)
以下是Oracle網頁的鏈接,該網頁討論了將32位應用程序移植到64位時常遇到的問題:
http://www.oracle.com/technetwork/server-storage/solaris/ilp32tolp64issues-137107.html
一節討論如何使用lint檢測一些常見錯誤。 這是該部分的副本:
使用lint實用程序檢測64位長和指針類型的問題使用lint檢查為32位和64位編譯環境編寫的代碼。 指定
-errchk=longptr64
選項以生成LP64警告。 還可以使用-errchk=longptr64
標志來檢查對於長整數和指針大小為64位且普通整數大小為32位的環境的可移植性。-errchk=longptr64
標志檢查指針表達式和長整數表達式的賦值為純整數,即使使用顯式強制轉換也是如此。使用
-errchk=longptr64,signext
選項查找代碼,其中正常的ISO C值保留規則允許在unsigned-integral類型的表達式中擴展有符號整數值的符號。 如果要檢查要在Solaris 64位SPARC或x86 64位環境中運行的代碼,請使用lint的-m64
選項。當lint生成警告時,它會打印違規代碼的行號,描述問題的消息以及是否涉及指針。 警告消息還指示所涉及數據類型的大小。 當您知道涉及指針並且知道數據類型的大小時,您可以找到特定的64位問題並避免32位和更小類型之間存在的預先存在的問題。
您可以通過在上一行放置“NOTE(LINTED())”形式的注釋來禁止給定代碼行的警告。 當您希望lint忽略某些代碼行(如強制轉換和賦值)時,這非常有用。 使用“NOTE(LINTED())”注釋時要特別小心,因為它可以掩蓋實際問題。 使用NOTE時,還包括#include。 有關更多信息,請參閱lint手冊頁。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.