If you're using gcc, there's a good chance that it's running your symbols through it's C++ name mangling stuff, even though you're coding in C.
The way I know of to fix this is to use extern "C" in your dynamic lib code, something like this:
Code:
#include<stdio.h>
extern "C" {
void printer(char *str)
{
printf("%s",str);
}
}
This will tell the compiler not to mangle the symbol names. There are also a couple other ways to use extern "C", I think. This is just the only way I remember off the top of my head.