C基础:C语言程序调用C++库函数方法

发布时间:2011-08-29 共1页

  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
  $

百分百考试网 考试宝典

立即免费试用