Estou tentando chamar uma função C x86, printf
, em assembly, mas há um erro de vinculação: error LNK2019: unresolved external symbol _printf referenced in function _main
.
.model flat, C
.code
extern printf: proc
main proc
push offset msg
push offset fmt
call printf
ret
main endp
.data
msg db "Hello world!", 0
fmt db "%s", 0
end
Como posso resolver esse problema?
pode haver várias maneiras. se quiser usar bibliotecas existentes -
_printf
estava dentrolegacy_stdio_definitions.lib
, mas se usá-lo, também precisa vincularlegacy_stdio_wide_specifiers.lib
eucrt.lib
, chamar__initterm
(ou definir o ponto de entrada para_wmainCRTStartup
) o código completo neste caso pode parecer(observe que é melhor usar
.const
a seção.data
aqui para dados constantes)e linkar arquivo com
outra maneira - construa meu próprio msvcrt.lib (o msvcrt.lib padrão não tem,
printf
apesar de ter sido exportado pormsvcrt.dll
e então use-o) maneira mínimae
msvcrt.def
:construir com
e então pode usar isso
link com:
(maneira mais geral de autoconstruir biblioteca para dll - aqui )
Exemplo de código de 32 bits:
Exemplo de código de 64 bits:
Se você estiver usando o Windows, a
main
função deve ser nomeada_main