单独使用gcc的时候,不用考虑C_INCLUDE_PATH/CPLUS_INCLUDE_PATH/LIBRARY_PATH/LD_INCLUDE_PATH这些变量,但使用make的时候,就要显示地提供这些变量(如果必要)
静态库的创建与操作:
ar [drqtpmx] [options] archive.a object.o
-d: 从静态库中删除文件objfile
-r: 替换或插入objfile
-q: quick append,加入objfile without checking
-t: type打印静态库中的成员文件列表
-p: Print指定objfile
-m: move移动archive中的成员
-x: extract从静态库文件中抽取文件objfile
-c: 创建静态库文件
-s: 重置静态库文件索引
eg.释放静态库文件
#ar -x /usr/lib/libc.a
#ls *.o
_ctype.o
_cvt.o
...
xcvt.o
xstat.o
eg.创建静态库文件
#ar -svr libccc.a xcvt.o xstat.o
Creating libccc.a
#ar -t libccc.a
xcvt.o
xstat.o
eg.将静态库libpr.a相关代码链接到目标文件中
#cc main.c -L./ -lpr
或
#cc main.c ./libpr.a
静态库的创建与操作:
ar [drqtpmx] [options] archive.a object.o
-d: 从静态库中删除文件objfile
-r: 替换或插入objfile
-q: quick append,加入objfile without checking
-t: type打印静态库中的成员文件列表
-p: Print指定objfile
-m: move移动archive中的成员
-x: extract从静态库文件中抽取文件objfile
-c: 创建静态库文件
-s: 重置静态库文件索引
eg.释放静态库文件
#ar -x /usr/lib/libc.a
#ls *.o
_ctype.o
_cvt.o
...
xcvt.o
xstat.o
eg.创建静态库文件
#ar -svr libccc.a xcvt.o xstat.o
Creating libccc.a
#ar -t libccc.a
xcvt.o
xstat.o
eg.将静态库libpr.a相关代码链接到目标文件中
#cc main.c -L./ -lpr
或
#cc main.c ./libpr.a
其中-L./表在当前文件夹下寻找静态库
//pr1.c
#include <stdio.h>
void print1()
{
printf("This is the first static lib provided function: print1()./n");
return;
}
//pr2.c
#include <stdio.h>
void print2()
{
printf("This is the second static lib provided function: print2()./n");
return;
}
//main.c
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
print1();
print2();
return 0;
}
//makefile
lib:
g++ -O -c pr1.c pr2.c
ar -rv libpr.a pr1.o pr2.o
check:
ar -t libpr.a
test:
g++ -O -o main main.c -L./ -lpr
#g++ -O -o main main.c ./libpr.a
clean:
rm -f pr1.o pr2.o libpr.a main