Linux下簡單編譯so庫,呼叫另一個so庫的方法
阿新 • • 發佈:2019-01-31
linux下將c/c++編譯成so庫
gcc -fPIC -shared Cat.c -o libcat.so
-fPIC是壓制警告
-shared是生成動態庫
Cat.c是要編譯的檔案
-o是要生成的檔案的名稱
linux下將c/c++生成可執行檔案
gcc -rdynamic -o main main.c -ldl
-rdynamic是生成可執行檔案
-o是生成的檔案的名稱
main.c是要編譯的檔案
-ldl可以理解為要生成一個動態庫吧(這個不是太懂)
之後會在當前目錄下生成一個main檔案
直接./main就可以執行了
下面舉個例子
首先寫了一個Cat.c
int add(int a,int b){ return (a + b); }
然後把Cat.c編譯成一個so庫
gcc -fPIC -shared Cat.c -o libcat.so
執行完之後會在當前路徑下生成一個libcat.so檔案
在寫一個main方法,這裡寫了一個main.c
#include <stdio.h> #include <stdlib.h> #include <dlfcn.h> typedef int (*ADD)(int,int); int main(){ #這裡呼叫剛才生成的so庫裡的add方法 void *handle=dlopen("./libcat.so",RTLD_LAZY); ADD add=NULL; *(void **)(&add)=dlsym(handle,"add"); int result=add(2,5); printf("%d\n",result); return 0; }
之後將main.c生成一個可以執行的檔案main
gcc -rdynamic -o main main.c -ldl
執行之後會在當前路徑下生成一個main檔案
直接./main就會列印:7,也就是呼叫了剛才那個so庫方法裡的add方法