zoukankan      html  css  js  c++  java
  • 如何用c语言调用c++做成的动态链接库

    今天在做东西的时候遇到一个问题,就是如何在C语言中调用C++做的动态链接库so文件
    如果你有一个c++做的动态链接库.so文件,而你只有一些相关类的声明, 那么你如何用c调用呢,别着急,本文通过一个小小的例子,让你能够很爽的搞定.   
    链接库头文件:
    head.h

    class A  
    {  
            public:  
            A();  
            virtual ~A();  
            int gt();  
            int pt();  
    private:  
            int s;  
    };  
    // 何问起 hovertree.com

    firstso.cpp

    #include <iostream>   
    #include "head.h"  
      
      
    A::A(){}  
    A::~A(){}  
    int A::gt()  
    {  
        s=10;  
    }  
    int A::pt()  
    {  
            std::cout<<s<<std::endl;  
    }  
    // 何问起 hovertree.com

    编译命令如下:
    g++ -shared -o libmy.so firstso.cpp
    这时候生成libmy.so文件,将其拷贝到系统库里面:/usr/lib/
    进行二次封装:

    secso.cpp

    #include <iostream>  
    #include "head.h"  
    extern "C"  
    {  
    int f();  
    int f()  
    {  
    A a;  
    a.gt();  
    a.pt();  
    return 0;  
    }  
    }  
    // 何问起 hovertree.com

    编译命令:
    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;  
    }  
    // 何问起 hovertree.com

    编译命令如下:
    gcc -rdynamic -s -o myapp test.c

    运行Z$./myapp

    10
    $

    http://www.cnblogs.com/roucheng/p/3456005.html

  • 相关阅读:
    oracle 存储过程
    交错数组
    延迟加载
    js 闭包
    引用类型和值类型
    事务
    web api 之身份验证
    SQLServer中的服务器角色与数据库角色
    按照某一字段的相同值合并所对应的行的值
    VC工程中的字符集工程属性和字符编码(转)
  • 原文地址:https://www.cnblogs.com/roucheng/p/cdll.html
Copyright © 2011-2022 走看看