linux環境下的c 動態庫的呼叫

2021-08-21 11:17:26 字數 1976 閱讀 1090

主要是為了平時的學習記錄,不妥的地方,煩請指點。

一.下面主要是dlopen開啟動態庫.so相關的api介面函式。

1. void* dlopen(const char* filename,int flag);

filename 是動態庫的path路徑,flag是動態庫載入的幾種方法。

#ifndef __ctest_dl_h__

#define __ctest_dl_h__

class ctestdl

virtual ~ ctestdl()

public:

virtual void test(const char*) =0;

virtual void print()=0;

protected:

int length;

int width;

};extern "c" ctestdl* getclass(int,int); //匯出函式名

#endif

#include #include "ctest.h"

using namespace std;

class test :public ctestdl

~test(){}

public:

void test(const char*);

void print();

private:

int length ;

int width;

};

test類的cpp檔案:

#include #include #include "test.h"

using namespace std;

ctestdl* getclass(int a,int b)

void test::test(const char* data)

void test::print()

編譯的命令: g++ -shared -lc -s -o libtdlc.so test.cpp -fpic    生成動態庫libtdlc.so

測試程式:

#include #include #include #include #include "ctest.h"

using namespace std;

typedef ctestdl* (*ptestdlobj)(int,int); //定義乙個函式指標

int main(int argc,char* argv)

//ptestdlobj = (ctestdl * (*)(int,int))dlsym(lib_dl,"getclass");

ptestdlobj create_class = (ptestdlobj)dlsym(lib_dl,"getclass");

const char *dlmsg = dlerror();

if(null != dlmsg)

//ctestdl *ptestdl = ptestdlobj(2,3);

//ctestdl *ptestdl = (*ptestdlobj)();

ctestdl* tmp = create_class(3,3);

tmp->print();

tmp->test("success full !");

//ptestdl->print();

//ptestdl->test("success full ");

delete tmp;

dlclose(lib_dl);

return 0;

}

編譯: g++ main.cpp -rdynamic -ldl -s -o dl_main

程式執行的結果:

Linux環境下動態庫的呼叫

1 開啟動態鏈結庫 dlopen,函式原型為 void dlopen const char filename,int flag dlopen用於開啟指定名字 filename 的動態鏈結庫,並返回操作控制代碼。dlclose用於關閉指定控制代碼的動態鏈結庫,只有當此動態鏈結庫的使用計數為0時,才會真...

除錯linux的動態庫(動態庫的建立 呼叫 除錯)

add是庫lib.c中的函式,生成liblib.so gcc lib.c shared g debug o liblib.so 編譯呼叫庫的程式,指定庫檔案使用當前路徑 給動態庫函式add設定斷點 gdb b add 在下面提示中輸入 y function add not defined.make ...

Linux下C 動態庫

本人是剛畢業的大學生一枚,這是寫的第一篇部落格,若有不對的地方,懇請指正!由於工作原因,不得已在linux下開發專案,而且還是用c 對於c 本人是有一些白痴的。專案完成,在此做一下總結,給自己乙個交代。首先先對動態庫方面的只是做乙個總結 1 動態庫的簡單介紹 首先,動態庫就是動態鏈結庫,本人有些懶,...