标准C调用C++动态链接库

来源:互联网 发布:mac如何删除桌面文件 编辑:程序博客网 时间:2024/05/22 01:09
由于C++为了设现重载的问题,编译后后生成的函数名与C有一定的区别,所以C++生成的动态库不能用C提供的dlopen来直接进行调用,需要进行如下处理:
例:
/*sample.h*/
class  sample
{
    public:
         int  method();
    private:
}
假如上动态库提供了一个头文件和一个相应的库.so,我们在C中不能直接用ldsym去找这个函数的,因为c++编译方式与C不同,这时需要写一个中间文件,例mylib.c
#include "sample.h"
exter "C"
{
     int myfunction()
     {
          sample ss;
          ss.method();
     }
}
生成中间文件mylib.so

标准C的写法

#include <stdio.h>
#include <dlfcn.h>
main()
{
      int (*dlfunc)();
      void *handle;

      handle = dlopen("./mylib.so", RTLD_LAZY);     
      ...
      dlfunc = dlsym(handle, "myfunction");
      ...
      dlfunc();
      dlclose(handle);
      return;
}
大家把引用C++动态中函数想要做的东西可以全部放到myfunc中去做,然后在C中调用一次就可以了,如果只是测试,就没必要这要写了,把动态库当成静态连接也可以。

原创粉丝点击