2013-01-08 23 views
0

我有一個關於x64和x86系統
C++如何x64bit應用程序轉換爲86

我在QT 4.7編寫的C++應用程序中的幾個問題,通常我使用int爲整數等等。

因此,如果我想將此應用程序轉換爲x64bit,我應該怎麼做?

我應該只是用不同的編譯器選項構建它,或者我應該改變的東西在我的代碼

另外一個問題,如果我下載的開源應用程序,並在Linux中構建它是什麼架構會是64或86, 我的意思是,如果我建立x64bit源Linux,我會得到一個64位的應用程序,如果我建源x86bit的Linux,我會得到一個x86的應用

+0

你使用Qt for *整數*? – leemes

+0

輸出取決於命令行選項,而不是您正在運行的操作系統。例如,您可以使用x86 CPU運行PC,但會爲ARM移動設備構建代碼。這是[交叉編譯](http://en.wikipedia.org/wiki/Cross_compiler)。 x86 gcc可以發出32位和64位代碼,甚至可以使用64位代碼而不是32位(https://sites.google.com/site/x32abi/) –

回答

1

類型構建應該依賴於編譯器和架構你」重新建設。

也就是說,代碼應該(應該已經)寫入,以便支持具有不同位深度的構建。

例如,如果使用long聲明整數變量,則變量的大小將有所不同(取決於體系結構)。如果您改爲使用std::int32_tstd::int64_t來聲明它,則在架構之間切換時,大小將保持不變。除了位深度之外,還應該確保任何依賴於字節順序的代碼繼續正確運行(除了位深度和字節順序之外,還可能有其他因素需要注意)。

總而言之,您可能只是在新的體系結構上重新編譯代碼,並且它可以工作,或者您可能需要進行一些編輯。我想這取決於你的代碼的功能以及它的寫法。

+0

使用'std :: int32_t '只有在切換到另一個具有32位整數類型的體系結構時,才能保證大小不變。對於這種可移植性,「int_least32_t」遠遠好於「int32_t」,但這裏並不是真的需要,因爲「long」總是至少爲32位。 –

+0

構建的類型主要取決於編譯的方式,而不是編譯的構架。雖然默認爲自己的體系結構構建,但許多編譯器接受更改目標體系結構的標誌。例如,在64位環境中構建32位應用程序是非常普遍的(儘管相反情況不太常見)。 –

0

是的,你可能只需要重新編譯它。在(大多數?)64位體系結構中,int的大小仍然是32位。

第二個問題的答案是,除非您另外告訴編譯器,否則它可能會爲您編譯的平臺構建。鍵入uname -m會告訴你哪一個是。

相關問題