Linux 靜態庫轉換為動態庫
首先將.a文件轉為.so文件是可以實現的
原因是:.a 文件其實是 .o 文件的壓縮包,所以你需要去解壓縮,然后再生成 .so 就可以了
舉例:
編輯 test.c
#include <string.h> void test(char *str) { strcpy (str, "haha"); }
1 生成靜態庫:libtest.a
1.生成 .o 文件,這里必須加上 -fpic 否則后面生成 so 是會報錯 gcc -fpic -c test.c 2.生成 .a 文件 ar -r libtest.a test.o
2 開始將 .a 轉換為 .so:libtest.so
1.分離出 test.o ar -x libtest.a 2.編譯生成 .so 文件
gcc -shared *.o -o libtest.so
3 查看導出函數
nm -D libtest.so
可以看到 test() 函數已經導出
4 使用 libtest.so
編輯 main.c
#include <stdlib.h> #include <stdio.h> int main ( int argc, char *argv[] ) { char buf[32] = {}; test(buf); printf ("buf is:%s\n", buf); return 0; }
編譯連接
gcc main.c -ltest -L./
設置運行的環境變量
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./
運行
./a.out