热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

gcc编译静态链接库

静态链接库(staticlibrary)是目标文件(.o文件或.obj文件)的集合,后缀为.a在编译使用时,静态库会被拷贝到可执行文件中,所以最终生成的可执行文件不依赖于静态库。但这也
静态链接库(static library)是目标文件(.o文件或.obj文件)的集合,后缀为.a

在编译使用时,静态库会被拷贝到可执行文件中,所以最终生成的可执行文件不依赖于静态库。但这也使得可执行文件庞大,加载速度慢的问题。另外,一旦修改,就必须重新编译,不能想共享库那样灵活的升级。

本文对gcc编辑静态链接库演示一个示例,供参考,好记星不如烂笔头。


1. 编写代码

编写hello.h头文件, 包含print_hello()函数


#ifndef HELLO_H
#define HELLO_H
void print_hello();
#endif
编写hello.c源文件, 包含print_hello函数的实现
#include "hello.h"
#include
int main(int argc,char *argv[])
{
printf("hello world!");

2. 编译

编译命令(centos5+gcc4.1.2)

[test@hadoop hello]$ gcc -c hello.c  #将源文件编译为目标文件
[test@hadoop hello]$ ls
hello.c hello.h hello.o
[test@hadoop hello]$ ar crs libhello.a hello.o #使用ar 将目标文件打包成为.a静态链接库
[test@hadoop hello]$ ls
hello.c hello.h hello.o libhello.a

3. 使用静态库

*******************main.c***************

#include "hello.h"
int main(int argc,char *argv[])
{
printf_hello();
}

编译执行
[test@hadoop hello]$ ls
hello.c hello.h libhello.a main.c
[test@hadoop hello]$ gcc main.c -o main -L. -lhello -I. #在使用静态链接库时, 使用-l指定链接库名称
[test@hadoop hello]$ ./main
hello world!
-lhello: 链接libhello.so 或者libhello.a库文件, 其中共享库文件优先. 如果同时存在静态库和共享库,可以使用-static强制使用静态库。
或者直接指定静态库libhello.a
[test@hadoop hello]$ gcc main.c -o main libhello.a



推荐阅读
author-avatar
Edison小磊
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有