Unix/Linux C静态库的使用

单独使用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

其中-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


你可能感兴趣的:(c,function,gcc,Path,include,archive)