I recently met with the same problem while trying to link googletest with library containing the tests and found the following note in their primer :
When you define your tests, Google Test creates certain static objects
to register them. These objects are not referenced from elsewhere but
their constructors are still supposed to run. When Visual C++ linker
sees that nothing in the library is referenced from other places it
throws the library out. You have to reference your library with tests
from your main program to keep the linker from discarding it. Here is
how to do it. Somewhere in your library code declare a function:
__declspec(dllexport) int PullInMyLibrary() { return 0; }
If you put your tests in a static library (not DLL) then __declspec(dllexport)
is
not required. Now, in your main program, write a code that invokes
that function:
int PullInMyLibrary();
static int dummy = PullInMyLibrary();
This will
keep your tests referenced and will make them register themselves at
startup.
In addition, if you define your tests in a static library, add
/OPT:NOREF
to your main program linker options.
While this may be no the most beautiful workaround ever this certainly worked for me and I think if there would be the one better they would have mentioned it in their primer instead.