本文介绍了MinGW 32未定义对`ExitProcess@4的引用(&Q;)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

限时删除!!

出于学习目的,我编写了一个小汇编程序(test.asm):

global _main

extern _ExitProcess@4

section .text

    _main:

        mov     ebx,0
        push    ebx
        call    _ExitProcess@4

然后我用NASM(test.obj)组装了它:

nasm -f win32 test.asm

现在我正尝试将其链接到"可移植可执行文件"(Windows 10 32位):

ld test.obj

但我总是收到此错误消息:

undefined reference to `ExitProcess@4'
据我所知,这条消息的意思是,我的程序没有链接到"Kernel32.dll"。但我认为"ld"会自动链接到"Kernel32.dll",因此我不必为此添加一些标志。此外,如果我添加此标志:

ld test.obj -lkernel32

我收到以下错误消息:

cannot find -lkernel32

我确信我犯了一个愚蠢的错误,所以也许有人能告诉我出了什么问题。

编辑:

如果我使用"GCC",它的作用是:

gcc test.obj -nostdlib -lkernel32

所以现在我想知道为什么"GCC"知道"-lkernel32"而"id"不知道。

推荐答案

正如您已经了解到的,使用ld您需要指定路径来查找适当的库。

不过有一个建议,如果您想让学习过程变得更轻松,有一个名为golink的轻量级链接器,它链接这些类型的代码片段就像做以下操作一样简单:

> nasm -f win32 foo.asm && golink foo.obj kernel32.dll

GoLink.Exe Version 1.0.2.3 - Copyright Jeremy Gordon 2002-2016 - [email protected]
Output file: foo.exe
Format: Win32   Size: 1,536 bytes

它允许您链接到必要的dll,而且几乎不需要总是搞乱搜索路径。

这篇关于MinGW 32未定义对`ExitProcess@4的引用(&Q;)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

1403页,肝出来的..

09-07 16:55