助跑。。。。。。跳

你的丰富就是我的成长

c语言写的程序里,调用C++写的库里的函数

 

在C语言程序当中使用C++编写的函数,关键是函数名字解析问题。  
  使用关键字   extern   "C"   可以使得C++编译器生成的函数名满足C语言的要求

例子如下:  
   
  链接库头文件:  
  //head.h  
  class   A  
  {  
                  public:  
                  A();  
                  virtual   ~A();  
                  int   gt();  
                  int   pt();  
  private:  
                  int   s;  
  };  
   
  .cpp  
  //firstso.cpp  
  #include   <iostream>    
  #include   "head.h"  
   
  A::A(){}  
  A::~A(){}  
  int   A::gt()  
                  {  
  s=10;  
                                  }  
  int   A::pt()  
                  {  
                   
                                  std::cout<<s<<std::endl;  
                  }  
  编译命令如下:  
  g++   -shared   -o   libmy.so   firstso.cpp  
  这时候生成libmy.so文件,将其拷贝到系统库里面:/usr/lib/  
  进行二次封装:  
  .cpp  
  //secso.cpp  
  #include   <iostream>  
  #include   "head.h"  
  extern   "C"    
   
  {  
   
  int   f();  
   
  int   f()  
  {  
  A   a;  
  a.gt();  
  a.pt();  
  return   0;  
  }  
   
  }  
  编译命令:  
  gcc   -shared   -o   sec.so   secso.cpp   -L.   -lmy  
  这时候生成第二个.so文件,此时库从一个类变成了一个c的接口.  
  拷贝到/usr/lib  
  下面开始调用:  
  //test.c  
  #include   "stdio.h"  
  #include   "dlfcn.h"  
   
  #define   SOFILE   "sec.so"  
  int   (*f)();  
  int   main()  
  {  
  void   *dp;  
  dp=dlopen(SOFILE,RTLD_LAZY);  
  f=dlsym(dp,"f");  
  f();  
  return   0;  
  }  
  编译命令如下:  
  gcc   -rdynamic   -s   -o   myapp   test.c  
  运行Z$./myapp  
  10  
  $

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭