2011-09-20 64 views
1

我有一個C++ Visual Studio項目,我正在嘗試編譯x86和x64體系結構。我搜索了一下,發現了很多關於如何操作的信息,它似乎可行,但它讓我對窗簾背後發生的事情感到非常困惑。試圖瞭解編譯器和鏈接器之間的多平臺編譯的交互

顯然,設置中的唯一區別在於鏈接器中的一個開關命令行標誌(準確地說,它是/ MACHINE標誌)。

但如果是這樣的話,那麼編譯的目標文件必須是平臺獨立 - 這是莫名其妙的什麼,我一直認爲它是完全相反的,因爲目標文件應該是序列機器代碼依次應該是平臺,依賴於

所以,我的問題是:構建過程的哪個部分不按照我認爲的方式工作?

感謝您的時間和智慧!

邁克爾

+0

添加了Visual C++標記,因爲GCC *會生成依賴於架構的對象文件。 –

回答

0

當編譯爲32位x86,Visual Studio中使用編譯器\ Program Files文件\微軟的Visual Studio 10.0 \ VC \ BIN \ cl.exe時。編譯64位x86時,Visual Studio使用編譯器\ Program Files \ Microsoft Visual Studio 10.0 \ VC \ bin \ amd64 \ cl.exe。第一個編譯器生成32位目標文件,第二個生成64位目標文件。這可以通過在對象文件上運行dumpbin.exe來查看其指定的體系結構。

編譯器調用保持不變(或多或少) - 在構建之前設置的可執行文件$ PATH有哪些變化。通過將PATH指向32位或64位目錄,它會偷偷改變運行構建項目的整套程序。您可以通過查看項目屬性>配置屬性> VC++目錄>可執行目錄並單擊「編輯」來查看。在「繼承的值」框中,您將看到當前配置和平臺的路徑。

+0

謝謝,這似乎恢復了我的理智,事實上,我發現了不同的目錄設置。在我看來,來自Unix背景的相當不直觀,但我想我可以看到它背後的想法。 –