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

首先介绍一些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 查看静态库中的函数名称;

Linux下静态库的生成以及使用实例图解_第1张图片

此时已经生成了静态文件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指定头文件目录

Linux下静态库的生成以及使用实例图解_第2张图片

你可能感兴趣的:(Linux下静态库的生成以及使用实例图解)