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

来源:互联网 发布:淘宝贷款能贷多少 编辑:程序博客网 时间:2024/06/05 16:25

首先介绍一些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指定头文件目录




0 0
原创粉丝点击