Linux 靜態庫(.a)轉換為動態庫(.so)


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
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM