No.

I think we should only have the actual exported functions in lib.h.

In general, I'd say we should make everything we can static, unless there's something preventing that, such as the symbol being used in another compilation unit, or if the symbol is required to be looked up at runtime.

So in this case, I'd make createSharedDataMap, and the dllmain*{Detach,Attach} functions static and ensure that their prototypes are predeclared somewhere in the file if the structure of the rest of the code requires it.