NASM - The Netwide Assembler

NASM Forum => Using NASM => Topic started by: mark allyn on August 12, 2009, 03:26:51 AM

Title: can't get a NASM program to link -HELP
Post by: mark allyn on August 12, 2009, 03:26:51 AM
Hello everyone-

I have a vey simple NASM program that just calls _printf and returns.  The program assembles with NASM. BUT, when I go to link it, the wheels come off.  I get this message back saying that there is an undefiened reference to WinMain@16.  This undefined reference occurs in libmingw32.a.  

I don't understand what in blazes is happening.  I deleted the entire MinGW folder on my hard drive and downloaded an entirely fresh version of MinGW and got the same message.  I rebooted the system from a cold start too.  I am NOT calling WinMain in the program anywhere.  

i simply cannot imagine what is going on.  Am desperate.

Mark Allyn
Title: Re: can't get a NASM program to link -HELP
Post by: Frank Kotler on August 12, 2009, 05:05:00 AM
As a wild guess, I'll guess that WinMain@16 is the default entrypoint that the startup code expects to find. (dunno where 16 comes from, I only count 12...) Try:

%define _main WinMain@16 ; might want an underscore?

global _main
extern _printf

Courage, Mark! :)

Best,
Frank
Title: Re: can't get a NASM program to link -HELP
Post by: mark allyn on August 12, 2009, 10:55:55 AM
Hi Frank -

I tried your wild guess but it didn't work.  Here's the command lines:

c:\MinGW\bin\nasm.exe -f win32 -o testpgm.o  testpgm.asm
c:\MinGW\bin\gcc.exe -o testpgm.exe testpgm.o

Here's the code:

%define _main WinMain@16

segment .data
msg db "hiya", 0
outfmt db "%s", 0

segment .text
   global _test
   extern _printf
_test:
   enter 0,0
   pusha
   push msg
   push outfmt
   call _printf
   add esp, 8
   popa
   mov eax, 0
   leave
   ret

Doesn't matter to the linker whether the define is in or out. It continues to report "undefined reference to WinMain@16.

I wrote a little tiny C program just to see how much I might have destroyed in the MinGW library.  The C program compiled and linked fine and ran as expected....

Thanks for your help.

Mark A.
Title: Re: can't get a NASM program to link -HELP
Post by: japheth on August 12, 2009, 04:16:38 PM
If MinGW gcc is to link a Win32 console application, it needs a public label _main in the object module. So just replace all occurances of _test by _main.

japheth