【问题标题】:Linking assembly function .asm to c++ project in Visual Studio 2012在 Visual Studio 2012 中将汇编函数 .asm 链接到 c++ 项目
【发布时间】:2014-10-17 11:21:26
【问题描述】:

我在 Visual Studio 中创建了 windows c++ 项目来学习如何编写 asm 函数。 所以在我的项目中,我用这个简单的代码得到了 hello.asm:

.686
.MODEL FLAT
.STACK
.DATA 
.CODE

hello PROC
xor eax,eax
ret 
hello ENDP

END

和 asm_test.cpp 的主要功能如下:

#include "stdafx.h"
#include <Windows.h>
extern "C" void hello();

int _tmain(int argc, _TCHAR* argv[])
{
    hello();
    return 0;
}

所以一般来说 ml.exe 编译 asm 文件到 hello.obj 没有任何问题 但是 hello() 函数不知道应该从哪里获取它。这是编译器告诉我的。

1>------ Построение начато: проект: asm_test, Конфигурация: Debug Win32 ------
1>  Assembling hello.asm...
1>asm_test.obj : error LNK2019: ссылка на неразрешенный внешний символ _hello в функции _wmain
1>G:\renderer\asm_test\Debug\asm_test.exe : fatal error LNK1120: неразрешенных внешних элементов: 1
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

抱歉,在russion,但是很明显找不到hello功能

【问题讨论】:

    标签: visual-studio function assembly linker masm


    【解决方案1】:

    请将 hello 更改为 _hello plz。对于您的hello.asm,应该是:

    .686
    .MODEL FLAT
    .STACK
    .DATA 
    .CODE
    
    _hello PROC
    xor eax,eax
    ret 
    _hello ENDP
    
    END
    

    【讨论】:

    • 谢谢!它起作用了,尽管对我来说仍然不清楚为什么它应该是这样的。你能提供一个简单的解释吗?
    • @Antiusninja 虽然您的代码引用函数hellomainhello(),但编译器将其转换为_hello(),这就是链接器找不到该符号的原因。
    猜你喜欢
    • 1970-01-01
    • 2021-11-19
    • 1970-01-01
    • 2017-04-20
    • 1970-01-01
    • 2018-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多