這篇文章講解了如何生成靜態(tài)庫春贸,以及如何與靜態(tài)庫鏈接混萝。
了解如何生成以及鏈接靜態(tài)庫,需要對(duì)gcc/g++有所了解萍恕,這里提供一些資料
交叉編譯必知--gcc/g++詳細(xì)講解
在演示之前逸嘀,準(zhǔn)備3個(gè)文件,分別為ctest1.c,ctest2.c和prog.c允粤。
ctest1.c文件
void ctest1(int *i)
{
*i=5;
}
ctest2.c文件
void ctest2(int *i)
{
*i=100;
}
prog.c文件
#include <stdio.h>
void ctest1(int *);
void ctest2(int *);
int main()
{
int x;
ctest1(&x);
printf("Valx=%d\n",x);
return 0;
}
我們的目的是將ctest1.c和ctest2.c文件打包成.a庫崭倘,然后讓prog這個(gè)文件鏈接到.a這個(gè)庫。
1.執(zhí)行編譯
cc -Wall -c ctest1.c ctest2.c
會(huì)生成2個(gè)文件:ctest1.o ctest2.o
2.創(chuàng)建生成庫
ar -cvq libctest.a ctest1.o ctest2.o
生成靜態(tài)文件使用ar
类垫,這里生成的靜態(tài)文件為libctest.a
3.列出庫中的文件
ar -t libctest.a
ctest1.o ctest2.o
4.與庫鏈接
有兩種方式可以與庫鏈接
cc -o 可執(zhí)行文件名稱 prog.c libctest.a
cc -o 可執(zhí)行文件名稱 prog.c -L/path/to/library-directory -lctest
這里使用第二種司光,因?yàn)檫@個(gè)庫不是放在系統(tǒng)默認(rèn)的目錄下的
cc -o prog prog.c -L/home/cuiboye/test -lctest
執(zhí)行prog這個(gè)可執(zhí)行程序,可以看到輸出
Valx=5
至此悉患,我們成功的將C文件編譯成了.a靜態(tài)庫残家,以及其它的文件鏈接這個(gè).a靜態(tài)庫。