At least on Windows, this issue breaks building more complex DLLs.
The problem:
DSSS calls rebuild, rebuild scans the source and parses pragma(link,...) statements. Upon finding those, it consults the "lib" value from the "link" section of the current profile (from etc/rebuild) to get the DMD argument needed to pass the library to the linker. The default value for that setting is "-L+$i.lib". This syntax makes DMD pass the "+$i.lib" directly to the linker, however in some situations this string does not get appended to the list of linker input files, as it should. If a .def file is specified, DMD first puts the .def file after the list of input files (OPTLINK file lists are separated by commas, and files in a list are separated by +), and only after that it adds the "+$i.lib" string, which of course no longer gets added to the list of input files (and those files are considered as resources by the linker).
The solution is to change the setting above from "-L+$i.lib" to just "$i.lib". This works because DMD looks at each argument's extension to decide what to do with the file. In the case of .lib files, DMD just passes it to the linker - however, unlike with as it is now, it always puts the .lib file in the correct place in the linker command line. I've attached a patch against the SVN rebuild/rebuild.conf (although I think the files there are out-of-date as they don't have the "safe" and "oneatatime" settings the ones from the .zip download have).