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

字號:

C語言程序調(diào)用C++庫函數(shù)方法,關(guān)鍵是函數(shù)名字解析問題。 其實實現(xiàn)起來不是很難。
    使用關(guān)鍵字 extern \"C\" 可以使得C++編譯器生成的函數(shù)名滿足C語言的要求
    例子如下:
    鏈接庫頭文件:
    //head.h
    class A
    {
    public:
    A();
    virtual ~A();
    int gt();
    int pt();
    private:
    int s;
    };
    .cpp
    //firstso.cpp
    #include
    #include \"head.h\"
    A::A(){}
    A::~A(){}
    int A::gt()
    {
    s=10;
    }
    int A::pt()
    {
    std::cout<    }
    編譯命令如下:
    g++ -shared -o libmy.so firstso.cpp
    這時候生成libmy.so文件,將其拷貝到系統(tǒng)庫里面:/usr/lib/
    進行二次封裝:
    .cpp
    //secso.cpp
    #include
    #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
    下面開始調(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
    運行Z$./myapp
    10
    $