2013-11-23 77 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