自己實現的第乙個linux中dll的呼叫

2021-04-30 14:15:15 字數 2615 閱讀 6312

編輯

自己實現的第乙個linux中dll的呼叫

1. 編譯dll:

g++ -shared -lc -o strcase.dll  lowcase.cpp uppercase.cpp

如果要加入除錯資訊:(加上 -g選項)

g++ -shared -lc -o strcase.dll  lowcase.cpp uppercase.cpp -g

編譯c++ dll注意函式之前需要加上 extern "c",否則在dlsym函式呼叫的時候可能會找不到函式

2. 編譯exe:

g++ -ldl  -o strcase.exe main.cpp

如果要加入除錯資訊:(加上 -g選項)

g++ -ldl  -o strcase.exe main.cpp -g

3. gdb除錯

gdb strcase.exe

除錯時需要在編譯的時候加上(-g)選項

gdb命令:

b 設定斷點,例如: 

b main #表示跳到main函式

b main.cpp: 56 #56表示行號

l 列印當前的執行**附近的10行

p 列印變數szmsg的值

p szmsg

n 執行下一行(單步執行, 類似vc中的f10)

s 進入函式(類似vc中的f10)

r 執行(類似vc中的f5)

//main.cpp

cpp** 

"font-size: medium;">"color: #3366ff;">#include 

#include 

#include 

using

namespace std;  

#define true    1

#define false   0

typedef

intbool;  

typedef

void (*pfun_string)(char* pszstr);  

bool usedll(char* szmsg);  

int main()  

bool usedll(char* szmsg)  

cout << "the origin string:"

<< szmsg << endl;  

//open dll

hdll = dlopen("./strcase.dll", rtld_lazy);  

szdllerr = dlerror();     

if (szdllerr)  

//find the function

pfunupper = (pfun_string)dlsym(hdll, "strupper");     

szdllerr = dlerror();  

if (szdllerr)  

(*pfunupper)(szmsg);  

cout << "after strupper string:"

<< szmsg << endl;  

//call strlower

pfunlower = (pfun_string)dlsym(hdll, "strlower");  

szdllerr = dlerror();  

if (szdllerr)  

(*pfunupper)(szmsg);  

cout << "after strlower string:"

<< szmsg << endl;  

//close handle

int nret = dlclose(hdll);  

szdllerr = dlerror();  

cout << "close dll info:"

<< szdllerr << endl;      

}    

//lowcase.cpp

cpp** 

"font-size: medium;">"color: #3366ff;">#include 

#include 

#include 

using

namespace std;  

extern

"c"void strlower(char* pszstr)  

int nlen = 0;  

int i = 0;  

nlen = strlen(pszstr);  

for (i = 0; i < nlen; i++)  

}  }    

//uppercase.cpp

cpp** 

"font-size: medium;">"color: #3366ff;">#include 

#include 

#include 

using

namespace std;  

extern

"c"void strupper(char* pszstr)  

int nlen = 0;  

int i = 0;  

nlen = strlen(pszstr);  

for (i = 0; i < nlen; i++)  

}  }

自己的第乙個網頁

檔案是乙個儲存在輔助儲存器上的資料序列,可以包含任何資料內容。概念上,檔案是資料的集合和抽象。二進位制檔案直接由位元0和位元1組成,沒有統一字元編碼,檔案內部資料的組織格式與檔案用途有關。二進位制檔案和文字檔案最主要的區別在於是否有統一的字元編碼 無 件建立為文字檔案或者二進位制檔案,都可以用 文字...

自己的第乙個網頁

一 檔案讀寫的讀書筆記 二進位制檔案直接由位元0和位元1組成,沒有統一字元編碼,檔案內部資料的組織格式與檔案用途有關。二進位制檔案和文字檔案最主要的區別在於是否有統一的字元編碼 無 件建立為文字檔案或者二進位制檔案,都可以用 文字檔案方式 和 二進位制檔案方式 開啟,開啟後的操作不同。python對...

自己的第乙個網頁

檔案的使用包括 開啟,讀取,輸出 開啟模式說明r 唯讀模式 預設 檔案不存在則返回 filenotfounderror異常w 覆蓋寫模式,檔案不存在則建立,存在則覆蓋寫 x建立寫模式,檔案不存在則建立,存在則返回 fileexistserror異常a 追加寫模式,檔案不存在則建立,存在則追加寫 t文...