When linking a static library against an executable, unreferenced symbols are normally discarded. In my case some otherwise unused objects are used to register their respective classes into a factory and if the objects are discarded, this registration fails.
Under Unix where we use gcc, I can pass the flag --whole-archive to the linker ld (see excerpt from ld documentation below), which makes ld not discard any objects. Is there anything like this for Visual C++?
--whole-archive
For each archive mentioned on the command line after the
`--whole-archive' option, include every object file in the archive
in the link, rather than searching the archive for the required
object files. This is normally used to turn an archive file into
a shared library, forcing every object to be included in the
resulting shared library. This option may be used more than once.
The version of Visual C++ in Visual Studio 2015 Update 2 includes a new flag to link.exe
called /WHOLEARCHIVE
, which has equivalent functionality to the --whole-archive
option to ld
. According to the flag documentation:
The
/WHOLEARCHIVE
option forces the linker to include every object file from either a specified static library, or if no library is specified, from all static libraries specified to the LINK command.