zoukankan      html  css  js  c++  java
  • 如何用c语言调用c++做成的动态链接库 分类: Android 2014-09-16 10:57 751人阅读 评论(0) 收藏

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

    head.h
    class A
    {
            public:
            A();
            virtual ~A();
            int gt();
            int pt();
    private:
            int s;
    };

    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/
    进行二次封装:


    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
    $

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    mongodb使用
    chromedriver对应chrome版本
    爬虫-selenium的使用
    爬虫-步骤
    爬虫-lxml用法
    xpath用发
    Chrome插件安装和用法
    正则用法
    五层协议
    git相关流程
  • 原文地址:https://www.cnblogs.com/pjdssswe/p/4696018.html
Copyright © 2011-2022 走看看