建立linux動態鏈結庫:
從void *dlsym(void *handle, char *symbol); 的引數可以看出,該函式只傳兩個引數:乙個指向so的handle和乙個函式的symbol,所以so裡面的函式應該不允許過載,否則根據乙個symbol不能確定指向那個函式。為了相容c和c++在so中定義函式時用extern "c",以下用例子說明如何建立linux動態鏈結庫so檔案。
//test.h
#ifdef __cplusplus
extern "c"
#endif
//test.c
#include
#include "mytest.h"
void mytest()
//main.cpp
#include
#include
//#include "mytest.h"
void (*pmytest)();
bool testso()
else
}pmytest = (void (*)())dlsym(phandle, "mytest");
if( (error=dlerror()) != null )
pmytest();
if( phandle != null )
dlclose(phandle);
return true;
}int main()
//makefile
all : mytest.so testso
.cpp.o :
g++ -c -g -wno-deprecated $(cflags) $<
.c.o :
gcc -c -g -shared $(cflags) $<
mytest.so : mytest.o
g++ mytest.o -g -shared -o mytest.so
testso : main.o
g++ main.o -rdynamic -s -g -wl -o testso -ldl
clean :
rm -f *.o *.so testso
解析Linux靜態與動態鏈結庫的建立和使用
首先由下面幾個函式 strlen.h strlen.c strnlen.c main.c strlen.h 標頭檔案int strnlen char pstr,unsigned long ulmaxlen int strlen char pstr strlen.c 實現給定字串的長度 include...
Linux動態鏈結庫的建立與使用
使用gnu的工具我們如何在linux下建立自己的程式函式庫?乙個 程式函式庫 簡單的說就是乙個檔案包含了一些編譯好的 和資料,這些編譯好的 和資料可以在事後供其他的程式使用。程式函式庫可以使整個程式更加模組化,更容易重新編譯,而且更方便公升級。libc.so.n n應該大於或者等於6 這是c語言函式...
建立靜態鏈結庫 動態鏈結庫
下面的實操中的動態庫或者靜態庫名都用wujunwu 第一步 建立乙個源 建立靜態鏈結庫的源 include void func1 void int func2 int x,int y 第二步 建立乙個.件作為函式宣告 void func1 void intfunc2 int x,int y 第三步 ...