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
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.