1. 程式人生 > >Linux下簡單編譯so庫,呼叫另一個so庫的方法

Linux下簡單編譯so庫,呼叫另一個so庫的方法

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方法