link.exe не ссылается на C Runtime - PullRequest
0 голосов
/ 18 октября 2019

Я пытаюсь скомпилировать эту программу под NASM (x86-64, Windows).

; prime.asm
global _main
extern _scanf
extern _printf

section .data:
    n: dd 0
    i: dd 2
    format_string_scanf: db '%d', 0x0A
    format_string_no_printf: db 'The number %d is not prime', 0x0A
    format_string_yes_printf: db 'The number %d is prime', 0x0A

section .text
_main:
    push n
    push format_string_scanf
    call _scanf
    cmp dword [n], 1
    je NOT_PRIME
    cmp dword [n], 0
    je NOT_PRIME
FOR_LOOP:
    mov eax, [i]
    mul dword [i]
    cmp eax, [n]
    jg IS_PRIME
    mov edx, 0
    mov eax, [n]
    div dword [i]
    cmp edx, 0
    je NOT_PRIME
    jmp FOR_LOOP
IS_PRIME:
    push qword [n]
    push format_string_yes_printf
    call _printf
    jmp PROGRAM_END
NOT_PRIME:
    push qword [n]
    push format_string_no_printf
    call _printf
PROGRAM_END:
    ret

Вот параметры, которые я использую:

nasm.exe -f win64 -o prime.obj prime.asm
link.exe prime.obj /subsystem:console /entry:_main

NASM работает нормально, однакоlink.exe выдает 2 ошибки:

prime.obj : error LNK2001: unresolved external symbol _scanf
prime.obj : error LNK2001: unresolved external symbol _printf
prime.obj : fatal error LNK1120: 2 unresolved externals

Я полагаю, что он не в состоянии связаться с C Runtime так или иначе. Может кто-нибудь помочь мне решить эти 2 ошибки?

...