Dynamic Shared Library compilation with g++

前端 未结 4 1414
别跟我提以往
别跟我提以往 2021-01-30 18:44

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

4条回答
  •  囚心锁ツ
    2021-01-30 19:36

    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.

提交回复
热议问题