当前位置导航:炫浪网>>网络学院>>编程开发>>C++教程>>C++基础入门教程

如何用c语言调用c++做成的动态链接库

    如果你有一个c++做的动态链接库.so文件,而你只有一些相关类的声明, 那么你如何用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
    $

 

相关内容
赞助商链接