我试图用C ++运行我的简单汇编代码。我只有两个文件“.cpp”文件和“.asm”文件。在编译时会出现错误(见下文)。如果有人能提供帮助,我将不胜感激......:)
这是我的“main.cpp”文件
#include <iostream>
using namespace std;
extern "C" int GetValueFromASM();
int main(int argc, char *argv[]){
cout<<"value is:"<<GetValueFromASM()<<endl;
cin.get();
return 0;
}
我还有一个简单的“asm.asm”文件
.code
GetValueFromASM proc
mov rax,3254
ret
GetValueFromASM endp
end
尝试构建时出现此错误:
1>main.obj : error LNK2019: unresolved external symbol GetValueFromASM referenced in
function main
1>..\visual studio 2012\Projects\AllAssembly\x64\Debug\AllAssembly.exe : fatal error LNK1120: 1 unresolved externals
我尝试过去物业 - > LINKS-&gt;附加图书馆目录并改变路径 但它不起作用。
我也尝试过LINKER-&gt; SYSTEM-&gt; SUBSYSTEM并选择“Windows(/ SUBSYSTEM:WINDOWS)”或 “控制台(/ SUBSYSTEM:CONSOLE)”,但两人都没有工作。任何人都可以帮忙!!很高兴
答案 0 :(得分:5)
extern“C”表示前导下划线(c风格的函数命名)。只需将您的函数添加到.asm文件中,它就会开始链接。
UPD:如果您的项目没有构建,请确保您包含MASM构建自定义:转到项目上下文菜单 - &gt;构建自定义... - &gt;检查masm的复选框(.targets,.props)。
然后转到.asm文件的属性,并选择项目类型为“Microsoft宏汇编程序”。
答案 1 :(得分:2)
我把它与32位混淆了。 :(
所以这适用于64位。
section .code
global GetValueFromASM
GetValueFromASM:
...
答案 2 :(得分:1)
我没有对代码进行任何更改。我只是更改了一些配置,如“Arty”所示。
以下是如何: 右键单击您的项目 - >转到构建自定义 - &gt;检查MASM - &gt;单击确定 然后转到.asm文件的属性,并选择项类型为“Microsoft宏汇编程序”。
你完成!! ...感谢Arty&amp; Devolus的帮助。
对于类似问题可能有帮助: http://scriptbucket.wordpress.com/2011/10/19/setting-up-visual-studio-10-for-masm32-programming/