для целей обучения я написал программу небольшого ассемблера (test.asm):MinGW 32 "неопределенная ссылка на` ExitProcess @ 4' "
global _main
extern [email protected]
section .text
_main:
mov ebx,0
push ebx
call [email protected]
чем я собрал его с NASM (test.obj):
nasm -f win32 test.asm
Теперь я пытаюсь связать его с "Portable Executable" (для Windows 10 32 Bit):
ld test.obj
Но я всегда получаю сообщение об ошибке:
undefined reference to `[email protected]'
Насколько я понимаю, это сообщение, это означает, что моя программа не связана с «Kernel32.dll». Но я думал: «ld» ссылается на «Kernel32.dll» автоматически, поэтому мне не нужно добавлять к нему несколько флагов. Кроме того, если добавить этот флаг:
ld test.obj -lkernel32
Я получаю следующее сообщение об ошибке:
cannot find -lkernel32
Я уверен, что я глупая ошибка, так, может быть, кто-то может сказать мне, что случилось.
EDIT:
Если я использую "НКУ" вместо этого произведения:
gcc main.obj -nostdlib -lkernel32
Так что теперь я задаюсь вопросом, почему "НКУ" знает "-lkernel32" и "ld" нет.
Добавьте опцию '-v' в командную строку' gcc', и вы увидите, как она вызывает 'ld' для вас. – Jester
Спасибо. Это я отличный намек. – Michael
Где находится kernel32.lib? Вы пытались добавить операнд '-L'? –
fuz