本文介绍了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;)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!