test7-win32dll This is similar to test6, but Psyon helped me port the main.cc code to use LoadLibrary/GetProcAddress and make a Makefile that actually works. I found that even for a trivial example I cannot make a working executable with main in a DLL. Try making libmain a static library. But then would every module link in all the code, or still use an implementation lib? Standard build: /bin/sh.exe ../libtool g++ -mno-cygwin -g -c main.cc /bin/sh.exe ../libtool g++ -mno-cygwin -no-undefined -g -o libmain.la main.lo -rpath `pwd`/lib mkdir -p lib bin /bin/sh.exe ../libtool cp libmain.la `pwd`/lib /bin/sh.exe ../libtool g++ -mno-cygwin -no-undefined -g -o uselib libmain.la /bin/sh.exe ../libtool g++ -mno-cygwin -g -c module1.cc /bin/sh.exe ../libtool g++ -mno-cygwin -no-undefined -g -o libmodule1.la module1.lo -rpath `pwd`/lib libmain.la mkdir -p lib bin /bin/sh.exe ../libtool cp libmodule1.la `pwd`/lib /bin/sh.exe ../libtool g++ -mno-cygwin -g -c module2.cc /bin/sh.exe ../libtool g++ -mno-cygwin -no-undefined -g -o libmodule2.la module2.lo -rpath `pwd`/lib libmain.la mkdir -p lib bin /bin/sh.exe ../libtool cp libmodule2.la `pwd`/lib Try with libmain as a static lib. /bin/sh.exe ../libtool g++ -ggdb -mno-cygwin -g -c main.cc /bin/sh.exe ../libtool g++ -ggdb -mno-cygwin -no-undefined -g -o libmain.la main.lo mkdir -p lib bin /bin/sh.exe ../libtool cp libmain.la `pwd`/lib /bin/sh.exe ../libtool g++ -ggdb -mno-cygwin -no-undefined -g -o uselib libmain.la /bin/sh.exe ../libtool g++ -ggdb -mno-cygwin -g -c module1.cc /bin/sh.exe ../libtool g++ -ggdb -mno-cygwin -no-undefined -g -o libmodule1.la module1.lo -rpath `pwd`/lib libmain.la mkdir -p lib bin /bin/sh.exe ../libtool cp libmodule1.la `pwd`/lib /bin/sh.exe ../libtool g++ -ggdb -mno-cygwin -g -c module2.cc /bin/sh.exe ../libtool g++ -ggdb -mno-cygwin -no-undefined -g -o libmodule2.la module2.lo -rpath `pwd`/lib libmain.la mkdir -p lib bin /bin/sh.exe ../libtool cp libmodule2.la `pwd`/lib How to make an import library for cygmodule2-0.dll dlltool --as=as --dllname cygmodule2-0.dll --def .libs/cygmodule2-0.dll-def --output-lib .libs/libimp-cygmodule2-0.a dll-def file is: EXPORTS module_init @ 1 ; n_operations @ 2 DATA ; operate__Fii @ 3 ;