linux中建立自己的靜態庫 動態庫並使用
庫依賴:
gcc connect.c –o connect –I /usr/include/mysql –L /usr/lib/mysql -lmysqlclient
//-I是找到自己寫的標頭檔案所在的位置 -L是找到自己所寫的動態庫所在的位置,並且寫上函式名,靜態庫不用寫-L,只寫函式名//-I 是i 的大寫
先編譯一邊,會發現報錯,然後解析一下,沒有包含標頭檔案
新增上標頭檔案-I /usr/local/include/mysql後,在編一下,發現還有函式沒有識別出來,是因為沒有包含相應的庫檔案。
然後將庫檔案新增上以後,在進行編譯發現問題搞定了
這些操作都是在test的資料夾下做的,如果不是的話,用-I 和-L -I來找到標頭檔案的的位置,-L和動態庫的位置,
//在test的資料夾下有 main.c xiangjia.c xianjian.c xiangjia.h xiangjian.h//都是自己寫的
main.c中
#include <stdio.h>//正常寫法 #include "mymath.h"//自己定義的 int main() { int t=xiangjia(65,4); int z=xiangjian(45,2); printf("%d %d\n",t,z); return 0; }
xiangjia.c中
int xiangjia(int a,int b) { returna+b: }
xiangjian.c中
int xiangjian.(int a,int b) { return a-b; }
mymath.h中
#ifndef MYMATH_H //如果沒有定義這個標頭檔案 #define MYMATH_H //那麼定這個 int xiangjian(int a,int b);//xxx.c中的函式的宣告 int xiangjia(int a,int b); #endif
靜態操作
[[email protected] test]# gcc -c main.c xiangjia.c xiangjian.c //然後對所有的.c檔案進行轉換,變成.o目標檔案
[
[[email protected] test]# gcc -o mylib main.o libmylib.a //然後,使用-o對main.o 和已經生成的靜態庫libxxxxx.a重新命名,
[[email protected] test]# ./mylib //然後找到重新命名的檔案進行測試,執行 :/找到路徑/名字
110
20
動態操作
[[email protected] test]# gcc -shared -fPCI -o libmyname.so xiangjian.o xiangjia.o //使用這個命令,對靜態所生成的函式目標檔案,進行重新命名,格式:libxxxxx.so
[[email protected] test]# cp -r libmyname.so /lib //然後複製所生成的libxxxxx.so即動態檔案到 /lib資料夾下
[[email protected] Desktop]# gcc -o mymath ./test/main.c -L /lib/ -lmyname //然後對/路徑/main.c 重新命名 為 xxxxxx(mymath),並使用-L 找到/lib/ -lxxxx(即libxxxxx.so的縮寫),新增這個路徑
[[email protected] Desktop]# ./mymath
110
20
[[email protected] Desktop]#