From: Andrew on
I have a weird linktime problem that I hope people can shed some light
on. This is for some code I am working on. I didn't write it. The
linktime problem only happens when the library is built as a DLL.

It might help when I say what the hacky workaround is that I used.

There is a class that is like std::cout, used for logging. The class
is a template class, the std::cout-like object is an instantiation of
that class. It is declared in the header file and defined in the cpp
file. The class has operator<< defined with a number of overloads. The
operator<< does not depend on any template arguments so the functions
are not template specialisations.

The cpp file uses the cout-like object, invoking operator<< for a
number of types. When the app is linked the operator<< overloads that
the library itself used are found. Any use of operator<< that was not
used in the library itself causes these symbols not to be found. To
force the app to link I added code like this to the cpp of the

namespace {
void notUsed()
volatile bool flag = false;
if (flag)
someobjecttype someobject;
std::mout << someobject;

What is going on? I am really puzzled. FWIW, I am using Visual Studio
2008 on Windows-XP. The problem only happpens when the library is a
DLL. Linking against a static version of the libary is fine. The code
is not portable so I have not been able to try out building with GCC
as a shared library.


Andrew Marlow

[ See for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]