MinGW 32未定义对`ExitProcess@4的引用(&Q;) [英] MinGW 32 "undefined reference to `ExitProcess@4'"

查看:14
本文介绍了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 - JG@JGnet.co.uk
Output file: foo.exe
Format: Win32   Size: 1,536 bytes

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

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

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆