静态库使用

来源:互联网 发布:淘宝店铺远望手机 编辑:程序博客网 时间:2024/05/29 08:10

1. 代码

root@romulus-laptop:/work/test/archiveTest# cat a.c
#include<stdio.h>

void printA(){
    printf("in method printA of a.c./n");
}
root@romulus-laptop:/work/test/archiveTest# cat main.c
int main() {
    printA();
    return 0;
}

 

2. 编译静态库

root@romulus-laptop:/work/test/archiveTest# gcc -c a.c // 生成目标文件a.o

root@romulus-laptop:/work/test/archiveTest# ar r liba.a a.o // 生成静态库lib.a

root@romulus-laptop:/work/test/archiveTest# ranlib liba.a // 创建静态库文件的索引来提供和该库链接的其他程序的编译速度

root@romulus-laptop:/work/test/archiveTest# nm liba.a // 显示静态库的索引,

a.o:
00000000 T printA
         U puts

root@romulus-laptop:/work/test/archiveTest# nm a.o // 显示目标文件的符号
00000000 T printA
         U puts

 

3. 生成二进制可执行文件。(为什么main.c中使用a.c中的函数不需要声明?)

root@romulus-laptop:/work/test/archiveTest# gcc -o main main.c liba.a // 使用静态库和源文件编译并链接成二进制可执行文件
root@romulus-laptop:/work/test/archiveTest# ./main
in method printA of a.c.

 

下面来解释:为什么main.c中使用a.c中的函数不需要声明?, 这和静态库无关的。。。

root@romulus-laptop:/work/test/archiveTest# cat b.c
#include<stdio.h>

void printA() {
    printf("in method printA of b.c./n");
}
root@romulus-laptop:/work/test/archiveTest# gcc -o  main main.c b.c
root@romulus-laptop:/work/test/archiveTest# ./main
in method printA of b.c.

 

4. gcc选项中可以直接使用.o文件代替源文件

root@romulus-laptop:/work/test/archiveTest# rm main
root@romulus-laptop:/work/test/archiveTest# gcc -o main main.c a.o
root@romulus-laptop:/work/test/archiveTest# ./main
in method printA of a.c.

原创粉丝点击