通过在C项目中添加程序集文件来解决未解决的问题

时间:2014-10-26 19:28:46

标签: c++ assembly visual-studio-2013

我试图通过向Visual C ++项目添加一个程序集文件来使我的第一个(vs中的程序集文件用法)程序

我的C ++代码

#include<iostream>
using namespace std;
extern "C" void TestRegisters();
int main()
{
    cout << "Testing Registers" << endl;
    TestRegisters();
    cin.get();
    return 0;
}

我的汇编代码

.data
mybyte db 0

.code
     TestRegisters proc
        mov rax,3342
        mov rbx,2213
        mov rcx,rax
        mov mybyte,rax
        ret
     TestRegisters endp

end

我还做了以下配置

1.Using solution configuration I have made my platform x64.
2.I have also made my build coustomization setting to masm.

我收到两个错误。

1.error LNK1120: 1 unresolved externals 
2.error LNK2019: unresolved external symbol TestRegisters referenced in function main 

虽然有几个帖子已经可用,但遗憾的是这对我没有帮助。

2 个答案:

答案 0 :(得分:1)

旧问题,但最近我遇到了同样的问题,答案可能对其他人有用。

需要三个基本步骤:

  1. 公开您的ASM功能。您可以通过在文件开头键入以下内容来完成此操作:

    PUBLIC 测试寄存器

  2. 告诉解决方案如何在解决方案资源管理器中选择项目。在菜单栏上,依次选择“项目”,“生成自定义项”。在“ Visual C ++生成自定义文件”对话框中,选中masm(.targets,.props)旁边的复选框。选择确定以保存您的选择并关闭对话框。 (如此处1所述)

  3. 正确定义ASM文件的项目类型。在解决方案资源管理器中右键单击 .asm文件。然后在“常规”->“项目类型”中选择 Microsoft宏汇编程序,如下图所示。 Item Type Selection

我认为您的情况缺少最后一步。

答案 1 :(得分:0)

除了masm的自定义构建设置外,您还需要告诉链接器在构建exe文件时包含masm生成的目标文件。通常,您将目标文件的名称添加为附加输入文件。