Linux使用静态库注意事项
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Linux使⽤静态库注意事项
1. 静态库⼀定要放在⽣成⽂件后⾯
gcc main.c -o main libhello.a
2. 使⽤静态库时⼀定要连接所有⽤到的静态库
gcc main.c -o main liba.a libb.a libc.a
a依赖于b, b依赖于c; 注意多个连接静态库的顺序规则:越底层的库放在越后⾯
3. 静态库动态库相结合使⽤
gcc main.c –L/usr/local/lib –lworld –o main liba.a
4. 静态库链接顺序例⼦
1. world.c
#include<stdio.h>
void world(void)
{
printf("world!\n");
}
2. hello.c
#include<stdio.h>
void world(void);
void hello(void)
{
printf("hello.\n");
world();
}
4. main.c
void main()
{
hello();
}
5. 编译成⽬标⽂件
gcc -c hello.c world.c
6.⽣成静态库
ar -crv libhw.a hello.o world.o
7. 调⽤静态库⽣成可执⾏⽂件
gcc -o main main.c libhw.a
8. 错误链接⽅式
⽣成对象和静态库顺序错误
静态类库在链接时候顺序不对,libhello.a 依赖于libworld.a
总结如下:
1. 静态库和动态库中只有你写的代码,你所调⽤的所有外部函数的代码都不会编译到静态库中,所有编译动态库和静态库时,不需要指定其他库的库⽂件路径,只需要指定其他库的头⽂件路径即可;
2. 链接静态库的顺序⼀定是从新到旧,动态库链接顺序没有要求
3. 静态库位于⽣成对象之后。