精品理论电影在线_日韩视频一区二区_一本色道精品久久一区二区三区_香蕉综合视频

C基礎(chǔ):C語(yǔ)言程序調(diào)用C++庫(kù)函數(shù)方法

發(fā)布時(shí)間:2011-08-29 共1頁(yè)

  C語(yǔ)言程序調(diào)用C++庫(kù)函數(shù)方法,關(guān)鍵是函數(shù)名字解析問(wèn)題。 其實(shí)實(shí)現(xiàn)起來(lái)不是很難。
  使用關(guān)鍵字 extern \"C\" 可以使得C++編譯器生成的函數(shù)名滿(mǎn)足C語(yǔ)言的要求
  例子如下:
  鏈接庫(kù)頭文件:
  //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
  這時(shí)候生成libmy.so文件,將其拷貝到系統(tǒng)庫(kù)里面:/usr/lib/
  進(jìn)行二次封裝:
  .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
  這時(shí)候生成第二個(gè).so文件,此時(shí)庫(kù)從一個(gè)類(lèi)變成了一個(gè)c的接口.
  拷貝到/usr/lib
  下面開(kāi)始調(diào)用:
  //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
  運(yùn)行Z$./myapp
  10
  $

百分百考試網(wǎng) 考試寶典

立即免費(fèi)試用