2009-08-28 161 views
1

我正在開發一個將在64位計算機上運行的應用程序。32位64位兼容

但是,我們使用的庫有32位整數,我們無法更改。我們需要編譯並在64位計算機上運行。

應用程序運行時會有什麼影響?有什麼解決辦法嗎?

非常感謝任何建議,

+1

這是什麼操作系統? – 2009-08-28 15:29:36

+0

對於Windows XP x86和vista x64位。我只是想知道如何用整數進行計算。我會得到一個不正確的答案嗎? – ant2009 2009-08-28 15:53:27

回答

1

你有圖書館的來源嗎?如果是這樣,並且你重新編譯它,你可能會放棄它(只要庫的編寫者在編譯x86-64時沒有做出任何假設)。嚴格測試,並測試很長時間。

如果你的不是有源代碼(你只有一個i386編譯的二進制文件),鏈接器甚至不會讓你將x86-64代碼鏈接到它。 ABI只是不兼容。

在第二種情況下,你必須創建一個單獨的32位助手/封裝過程鏈接到32位庫,並採取請求通過IPC機制來調用從64位進程庫(返回結果)。您可以在IPC周圍的64位側創建包裝函數,以使其看起來像正常調用庫。您的64位進程在啓動時必須啓動32位輔助進程(並確保在父進程消失時輔助進程知道退出)。

2

我假設你的意思的x86和x86_64這裏當你談論64位。

int在這兩種架構上都是32位的。

你會遇到的唯一問題是,當你假設:

  • sizeof(void*) == sizeof(int)
  • sizeof(int) == sizeof(long)
  • longlong long大小是相同的大小。

否則你會沒事的。

+1

「int總是32位」 - 這是不正確的。唯一的要求是int至少有16位,並且sizeof(short)<= sizeof(int)&& sizeof(int)<= sizeof(long)'。事實上,int通常是16位系統上的16位(不是周圍有很多這樣的系統)。 – sepp2k 2009-08-28 15:41:20

+0

有點迂腐,我覺得考慮任何計算機的人誰問這個問題將有一個32位整數,他已經提到它。無論如何,更正了我的答案。 – 2009-08-28 15:46:16