I am on Windows 7, using tdm64-gcc-5.1.0-2 and SmartGit make.
This is what I see, when I compile Lemon:
$ make
CC ./src/main.c
./src/lemon.c: In function 'lemon_type_hash':
./src/lemon.c:447:9: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
return (unsigned long)key;
^
CC ./src/lemon.c
CC ./src/hash.c
CC ./src/shell.c
CC ./src/mpool.c
CC ./src/arena.c
CC ./src/table.c
CC ./src/token.c
CC ./src/input.c
CC ./src/lexer.c
CC ./src/scope.c
CC ./src/syntax.c
CC ./src/parser.c
CC ./src/symbol.c
CC ./src/extend.c
CC ./src/compiler.c
CC ./src/peephole.c
CC ./src/generator.c
CC ./src/allocator.c
CC ./src/collector.c
CC ./src/machine.c
CC ./src/lnil.c
CC ./src/ltype.c
CC ./src/lkarg.c
CC ./src/lvarg.c
CC ./src/ltable.c
CC ./src/lvkarg.c
CC ./src/larray.c
CC ./src/lframe.c
CC ./src/lclass.c
CC ./src/lsuper.c
./src/lobject.c: In function 'lobject_default':
./src/lobject.c:948:43: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
return linteger_create_from_long(lemon, (long)self);
^
CC ./src/lobject.c
CC ./src/lmodule.c
CC ./src/lnumber.c
CC ./src/lstring.c
CC ./src/linteger.c
CC ./src/lboolean.c
CC ./src/linstance.c
CC ./src/literator.c
CC ./src/lfunction.c
CC ./src/lsentinel.c
CC ./src/laccessor.c
CC ./src/lexception.c
CC ./src/lcoroutine.c
CC ./src/ldictionary.c
CC ./src/lcontinuation.c
CC ./lib/builtin.c
In file included from ./lib/os.c:19:0:
C:/TDM-GCC-64/x86_64-w64-mingw32/include/winsock2.h:15:2: warning: #warning Please include winsock2.h before windows.h [-Wcpp]
#warning Please include winsock2.h before windows.h
^
CC ./lib/os.c
./lib/socket.c:14:0: warning: "_WIN32_WINNT" redefined
#define _WIN32_WINNT 0x501
^
In file included from C:/TDM-GCC-64/x86_64-w64-mingw32/include/crtdefs.h:10:0,
from C:/TDM-GCC-64/x86_64-w64-mingw32/include/stddef.h:7,
from C:/TDM-GCC-64/lib/gcc/x86_64-w64-mingw32/5.1.0/include/stddef.h:1,
from ./src/lemon.h:4,
from ./lib/socket.c:1:
C:/TDM-GCC-64/x86_64-w64-mingw32/include/_mingw.h:225:0: note: this is the location of the previous definition
#define _WIN32_WINNT 0x502
^
In file included from ./lib/socket.c:16:0:
C:/TDM-GCC-64/x86_64-w64-mingw32/include/Winsock2.h:15:2: warning: #warning Please include winsock2.h before windows.h [-Wcpp]
#warning Please include winsock2.h before windows.h
^
CC ./lib/socket.c
gcc -std=c89 -pedantic -Wall -Wextra -Wno-unused-parameter -I. -I./src -DWINDOWS -O2 -flto -DNDEBUG -DMODULE_OS -DMODULE_SOCKET -shared obj/lemon.o obj/hash.o obj/shell.o obj/mpool.o obj/arena.o obj/table.o obj/token.o obj/input.o obj/lexer.o obj/scope.o obj/syntax.o obj/parser.o obj/symbol.o obj/extend.o obj/compiler.o obj/peephole.o obj/generator.o obj/allocator.o obj/collector.o obj/machine.o obj/lnil.o obj/ltype.o obj/lkarg.o obj/lvarg.o obj/ltable.o obj/lvkarg.o obj/larray.o obj/lframe.o obj/lclass.o obj/lsuper.o obj/lobject.o obj/lmodule.o obj/lnumber.o obj/lstring.o obj/linteger.o obj/lboolean.o obj/linstance.o obj/literator.o obj/lfunction.o obj/lsentinel.o obj/laccessor.o obj/lexception.o obj/lcoroutine.o obj/ldictionary.o obj/lcontinuation.o obj/builtin.o obj/os.o obj/socket.o -lm -lws2_32 -o liblemon.dll
C:\Users\sha\AppData\Local\Temp\ccAj9x2F.ltrans30.ltrans.o:<artificial>:(.text+0x1a6): undefined reference to `__imp_PathFileExistsA'
collect2.exe: error: ld returned 1 exit status
make: *** [liblemon.dll] Error 1
$