It sounds like you're not linking dynamiclib.so to the SparseImplementationLib correctly. Do you have a linker flag similar to -lSparseImplementationLib in your makefile?
See this SO question Compiler not creating templated ostream << operator
I had (almost) the same issue with a gStreamer like engine I'm working on - a function called from a .so file did not exist in the main code.
I found that the function was being removed by the linker as it was not being called by any internal functions.
At the moment, I've worked around the problem by forcing the function to be included by the linker via a function call/constructor, within a function that is conditionally never called:-
bool callme = false;
if(callme == true)
{
dummyfunction();
}
I found that this forced the linker to include, but the code itself was never run.
If anyone has a solution that either stops the linker being so intelligent, or there is a 'correct' method to use, I'd like to hear about it!
Ok, I managed to fix this this morning after about 10 hours hacking away last night.
Turns out that it compiles if you make the definitions of the function inline, and make sure it has options for the function with both all the template arguments and just non-defaulted arguments!