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  
  $

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值