I\'m trying to compile the following simple DL library example code from Program-Library-HOWTO with g++. This is just an example so I can learn how to use and write shared libr
With the way your code if written, this is really more of a C question, but you can get this to will work in C++. I don't have a tutorial for you on Dynamic Shared Libraries (the web page you linked to seems fine), but here's how to fix your code in C++:
declare my_cos to be a function that will (eventually) call the dynamically loaded cosine function:
double my_cos(double);
assign the function pointer to my_cos
my_cos = (double (*)(double)) dlsym(handle, "cos");
This is a little complicated, but it's assigning to my_cos something that returns a double, is the result of dereferencing another function pointer, and takes a double as an argument. As other people have posted, C++ is a little more demanding about the explicitness of your code than C.
replace that rather dated fputs message with a std::cerr or std::cout:
std::cerr << "error loading library cos: " << error << std::endl;
and
std::cout << "result is " << (*my_cos)(2.0)) << std::endl;
Hope that this help. If that weird casty stuff scares you, I'd recommend Deep C Secrets by van Linden, and definitely the Kernighan and Ritchie Book on C.
Edit: Good point in the comment about how you're specifically looking for a development guide in C++ rather than C to avoid this type of problem. I don't know of a comparable guide in C++, but about 99% of C code can be embedded in C++ code and work just fine. This function pointer case is one of the exceptions.