2013-03-15 101 views
1

我們的源代碼有一堆獨立的靜態模板函數。我需要使用IBM的原生xlc++編譯器在AIX 7.1 Power 7系統上進行編譯。將static關鍵字與獨立函數一起使用已經過時,並且它不受xlc++的支持,所以爲了讓我的程序編譯,我從函數聲明中刪除了該關鍵字。程序編譯成功後,第一次運行崩潰(在Linux/g++上,它對於相同的輸入數據非常穩定)。在AIX 7.1上編譯靜態模板函數xlC++

我試圖用dbx進行調試,但調試器抱怨internal errorsegmentation fault in extend_brk。沒有使用內存配額,因此它不是內存/磁盤空間不足。系統配置爲創建完整核心轉儲,程序編譯爲-g選項。所有庫都是靜態鏈接的,所以在共享庫中拋出異常並不是問題。 1)是否有可能在不刪除static關鍵字的情況下編譯xlc++上的靜態模板函數,因此我可以確定所有代碼都與RHEL系統中的相同? 2)爲什麼調試器不工作?

回答

0

看來我有32/64位可移植性問題,在這種情況下刪除static關鍵字是無害的。 問題已經消失後,我添加了下面一行在我的.kshrc文件:

export OBJECT_MODE=64 

默認情況下,IBM XL編譯在32位模式下運行,即使在64個AIX 7.1系統。要覆蓋默認行爲,程序員可以設置環境變量或爲編譯器提供-q64參數。