一 概述
二 类型
三 语句
四 函数
五 数据
六 内存
七 代码
附录
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
4. 静态库
库是代码集合,分静态库(static libray)和动态库(dynamic/shared library)两类。
静态库由已完成编译的目标文件(object file, .o)打包而成。链接器按需获取其中内容,以静态链接方式合并到可执行文件中。文件名通常以 lib
开头, .a
结尾。
创建
先准备好库源码文件(.c)以及包含原型的头文件(.h)。
将源码文件全部编译成目标文件( -c
, .o)。
代码优化发生在编译阶段,链接时不会再次优化,所以要区分 debug 和 release 版本。可分别提供
lib<name>.a
和lib<name>_release.a
两个版本。
$ gcc -c -g -O0 -Wall *.c # debug version
打包成静态库文件(.a),并创建索引(ranlib)。索引可加快对库中符号的查找速度。
$ ar -rs libdemo.a *.o # 打包成静态文件。
$ ar -t libdemo.a # 查看库中目标文件。 $ nm libdemo.a # 查看符号。 $ objdump -d -M intel libdemo.a # 反汇编。
使用
可直接作为输入文件链接。
$ gcc -g -O0 -Wall -I./lib -o test *.c ./lib/libdemo.a
或使用 -l<name>
参数。
<name>
不包含lib
前缀和.a
扩展名。GCC 对链接顺序有要求,要将
*.c
放在链接参数前。先提取符号信息,然后再从链接参数中匹配。顺序出错引发 “undefined reference” 错误。
$ gcc -g -O0 -I./lib -o test *.c -L./lib -ldemo ~~~ ~~~~~~~~~~~~~~
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论