c::builder has the following comment:
;; When a module is built out of several object files, we have to
;; create an additional object file that initializes those ones.
;; This routine is responsible for creating this file.
;; To avoid name clashes, this object file will have a temporary
;; file name (tmp-name).
However, the additional object file seems to be created and used
regardless of whether there are multiple object files. This doesn't
seem to cause a problem when a static library is created, but causes an
error (below) when building a dll.
;;; Note: Invoking external command:
;;; gcc -o "/path/to/libmoptilities.so" -L"/path/to/lib/ecl"
-Wl,--rpath,/path/to/lib/ecl -shared -lecl -lpthread -ldl -lm
/path/to/moptilities/dev/moptilities.o(.text+0x2db4): In function
: multiple definition of `init_MOPTILITIES'
/path/to/ECLINITWmzMYO.o(.text+0x0): first defined here
/usr/bin/ld: Warning: size of symbol `init_MOPTILITIES' changed from
112 in /path/to/ECLINITWmzMYO.o to 7392 in
collect2: ld returned 1 exit status