A simple mingw32 DLL with two source files (and headers). If the source file has a name that doesn't alphabetically come before all other source files, the resulting DLL causes a client MSVC application to crash during runtime. There are no compiler or linker errors. The attached archive contains the necessary files to test. It generates a non-working example. To make it work, change the name of the "entrx.c" file to something that would come after "entry.c", for example "entrz.c", and rebuild the DLL.
Created attachment 1881 [details] Test case mentioned in original post.
Created attachment 1882 [details] Compiled DLLs and executable test case.
I've found the following workaround: Ensure the source file containing the entry point function is the first one in the list when linking the final target. For this particular test case, add the following line: SRCS := src/entrx.c $(filter-out src/entrx.c,$(SRCS)) after this line (line 10): SRCS = $(wildcard $(SRCDIR)/*.c) The "entrx.c" file may now be named anything (as long as the makefile is updated) because the new line ensures it comes first in the list of files (the source file list is also used for the object files, but with a different extension).
Not a bug.