Linux下静态库的生成以及使用实例图解

本文介绍GCC常用选项及如何使用这些选项进行C源代码的编译,并详细讲解了静态库的创建过程,包括从生成目标文件到最终链接生成可执行文件的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先介绍一些gcc常用的选项:

作用

-o

产生目标(.i、.s、.o、可执行文件等)

-c

通知gcc取消链接步骤,即编译源码并在最后生成目标文件

-E

只运行C预编译器

-S

告诉编译器产生汇编语言文件后停止编译,产生的汇编语言文件扩展名为.s

-Wall

使gcc对源文件的代码有问题的地方发出警告

-Idir

将dir目录加入搜索头文件的目录路径

-Ldir

将dir目录加入搜索库的目录路径

-llib

链接lib库

-g

在目标文件中嵌入调试信息,以便gdb之类的调试程序调试



静态库(.a):程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库;


静态库的生成:用myprint.h 和 myprint.c 生成静态库libmyprint.a,然后用main.c使用该静态库;

myprint.h

void myprint(int num);  
myprint.c

#include <stdio.h>  
  
void myprint(int num)  
{  
    printf("my num is %d\n", num);    
} 
main.c
#include<stdio.h>  
#include "myprint.h"  
  
int main()  
{  
    myprint(100);  
    myprint(1000);  
  
    return 0;  
}  
第一步:生成myprint.o文件;使用命令,gcc  -c  myprint.c    -o   myprint.o

第二步:将生成的myprint.o文件打包成静态库myprint.a文件;使用命令 ar  rcs  libmyprint.a  myprint.o

可以使用命令file 文件查看文件类型;使用命令nm 查看静态库中的函数名称;

此时已经生成了静态文件libmyprint,可以将myprint.c文件删除;myprint.o也没有用了,也删除;

第三步:使用生成的静态库;

如果直接输入命令gcc  main.c  -o main 会提示错误,没有链接静态库,所以会报错

用-l来链接静态库;输入命令gcc  main.c  -o main -lmyprint 结果还是报错,没有找到该库文件,应该指定库文件的路径; 

用-L来指定当前路径;输入命令gcc  main.c  -o main -lmyprint  -L.;运行成功,生成了可执行文件main,运行main正常;


如果我把myprint.h放在inc目录下,把myprint.c, main.c放在src目录下;将生成的静态库libmyprint.a放在lib目录下;将生成的可执行文件main放在bin目录下;

第一步:生成myprint.o文件到lib目录下;

第二步:生成myprint.a静态库文件到lib目录下;

此时myprint.c和myprint.o已经没有用了;

第三步:使用静态库生成可执行文件main到目录bin下;注意需要用-I指定头文件目录




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值