连接c ++和asm编译错误

时间:2013-11-23 01:37:52

标签: c++ assembly interface

我正在尝试连接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.

这可能是我真的很愚蠢和琐碎,但我被困住了。 有什么想法吗?

2 个答案:

答案 0 :(得分:1)

这取决于您正在做什么,您的文件内容和您正在使用的操作系统。看起来你在Windows上使用MS宏汇编程序。您的“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

答案 1 :(得分:0)

我会说如果你真的需要提供汇编代码,那么中嵌入通常的c ++函数定义(例如使用GCC使用_asm {})并称之为。这至少可以帮助你在连接阶段不会遇到c ++名称修改和ABI合同的麻烦。

恕我直言,通常不值得尝试在汇编语言级别进行优化。我见过这种手写“优化”的罕见案例,真的可以与相当好的编译器优化输出竞争。

  

过早优化是万恶之源 - Edsger Dijkstra