• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 如何用c語言調用c++做成的動態鏈接庫

    發表于:2007-05-25來源:作者:點擊數: 標簽:做成C++何用動態調用
    如果你有一個c++做的動態鏈接庫.so文件,而你只有一些相關類的聲明, 那么你如何用c調用呢,別著急,本文通過一個小小的例子,讓你能夠很爽的搞定. 鏈接庫頭文件: //head.h class A { public: A(); virtual ~A(); int gt(); int pt(); private: int s; }; .cpp //

    如果你有一個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
    $

    原文轉自:http://www.kjueaiud.com

    評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)
    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>