2013-11-23 75 views
1

我想接口C++和asm代碼。 C++調用函數,該函數在asm中定義接口C++和asm編譯錯誤

我試着編譯它,它給了我一些錯誤。主要問題是,我是否需要創建單獨的C++和asm源文件或者只有一個。如果一個,哪一種? (cpp或asm)。

兩個錯誤,我當我嘗試編譯它作爲單獨的源文件獲得:

Error1: error A1000: cannot open file : ..\..\..\..\..\Desktop\test.asm 
Error2: error MSB3721: The command "ml.exe /c /nologo /Zi /Fo"Debug\test.obj" /W3 /errorReport:prompt /Ta..\..\..\..\..\Desktop\test.asm" exited with code 1. 

這或許我真的很愚蠢和瑣碎,但我堅持。 任何想法?

回答

1

這取決於你在做什麼,你的文件的內容和你正在使用的操作系統。它看起來像你在使用MS宏彙編程序的Windows上。你的「test.asm」文件應該只包含彙編語言。您的第一個錯誤表明您的程序集文件無法找到(或打開)。確保你有正確的文件位置。一旦asm文件實際組裝成功,它將生成一個obj文件。您可以像使用任何obj文件一樣使用此文件。確保組件中的任何函數符合正確的調用鏈接(對於C++)。你可能想看看這個問題how do i properly link asm files to c++?

如果你只有少量裝配,你可以使用'內聯裝配'。你可以找到更多關於這裏:http://msdn.microsoft.com/en-us/library/4ks26t93(v=vs.110).aspx

+0

我做了些廢話那裏。 我剛剛做了一個新的項目,妥善而謹慎地遵循你的建議和VOILA! 謝謝@Dweeberly – gkamani2011

0

我說,如果你真的需要提供彙編代碼,然後內(使用_asm {}與GCC EG)一個通常的C++函數定義內聯,並調用一。這至少可以幫助您在鏈接階段不會遇到與C++名稱綁定和ABI合同有關的問題。

恕我直言,通常不值得在彙編語言級別進行優化。我已經看到罕見的這種手寫'優化'的情況,這實際上可以與相當好的編譯器優化輸出相競爭。

過早的優化是一切罪惡的根源 - Edsger Dijkstra算法

+0

這是我們使用外部asm代碼的強制性要求。這就是爲什麼。 – gkamani2011

+0

不好的要求!因此,將接口[tag:c]與接口連接並使用其他屬性最終可能會達到您的目的。 –

+0

對於VS中的非x86代碼,您不能使用內聯asm。您必須將ARM和x64程序集分離爲單獨的MASM文件。 – Matt