I have verified that the class vpr::Singleton<T> does not work correctly for creating a singleton object that is consistent across DLLs on Windows. I suspect that the same is true for .dylib files on Mac OS X. The symptom is that a singleton accessed from two different DLLs has two different memory addresses, and as such, is not a singleton.
I don't know this for sure, but I suspect that the fact that the singleton interface is inherited from a templated type has something to do with the problem. All the template member functions are inlined into the calling code, and this may create some sort of weirdness with DLLs. By changing a given class to use the macros vprSingletonHeader() and vprSingletonImp() instead of deriving from vpr::Singleton<T>, the memory address issues go away. Perhaps some refactoring of
vpr::Singleton<T> could make it more DLL-friendly. Certainly, there must be some references on ways to make something like this work.