怎么自己写代码做网站,网页设计免费模板中文,企业建设网站 入账,google推广教程Linux上的静态库#xff0c;其实是目标文件的归档文件。在Linux上创建静态库的步骤如下#xff1a;写源文件#xff0c;通过 gcc -c xxx.c 生成目标文件。用 ar 归档目标文件#xff0c;生成静态库。配合静态库#xff0c;写一个使用静态库中函数的头文件。使用静态库时其实是目标文件的归档文件。在Linux上创建静态库的步骤如下写源文件通过 gcc -c xxx.c 生成目标文件。用 ar 归档目标文件生成静态库。配合静态库写一个使用静态库中函数的头文件。使用静态库时在源码中包含对应的头文件链接时记得链接自己的库。下面通过实例具体讲解。写源文件生成目标文件。第一个源文件 my_print.c#include stdio.hvoid cout(const char * message)
{fprintf(stdout, %sn, message);
}源文件2 my_math.cint add(int a, int b)
{return a b;
}int subtract(int a, int b)
{return a - b;
}使用gcc为这两个源文件生成目标文件gcc -c my_print.c my_math.c我们就得到了 my_print.o 和 my_math.o。归档目标文件得到静态库。我们使用 ar 将目标文件归档ar crv libmylib.a my_print.o my_math.o我们就得到了libmylib.a这就是我们需要的静态库。上述命令中 crv 是 ar的命令选项c 如果需要生成新的库文件不要警告r 代替库中现有的文件或者插入新的文件v 输出详细信息通过 ar t libmylib.a 可以查看 libmylib.a 中包含的目标文件。可以通过 ar --help 查看更多帮助。注意我们要生成的库的文件名必须形如 libxxx.a 这样我们在链接这个库时就可以用 -lxxx。反过来讲当我们告诉编译器 -lxxx时编译器就会在指定的目录中搜索 libxxx.a 或是 libxxx.so。生成对应的头文件头文件定义了 libmylib.a 的接口也就是告诉用户怎么使用 libmylib.a。新建my_lib.h 写入内容如下#ifndef __MY_LIB_H__
#define __MY_LIB_H__int add(int a, int b);
int subtract(int a, int b);void cout(const char *);
#endif测试我们的静态库在同样的目录下建立 test.c:#include my_lib.hint main(int argc, char *argv[])
{int c add(15, -21);cout(I am a func from mylib ...);return 0;
}这个源文件中引用了 libmylib.a 中的 cout 和 add 函数。编译test.c:gcc test.c -L. -lmylib将会生成a.out通过 ./a.out 可以运行该程序。说明我们的静态库能正常工作。上面的命令中 -L. 告诉 gcc 搜索链接库时包含当前路径 -lmylib 告诉 gcc 生成可执行程序时要链接 libmylib.a。通过makefile自动化上面的步骤很繁琐还是写个简单的makefile吧内容如下.PHONY: build testbuild: libmylib.alibmylib.a: my_math.o my_print.oar crv $ my_math.o my_print.omy_math.o: my_math.cgcc -c my_math.cmy_print.o: my_print.cgcc -c my_print.ctest: a.outa.out: test.cgcc test.c -L. -lmylibmakefile写好后运行 make build 将会构建 libmylib.a 运行 make test 将会生成链接 libmylib.a 的程序。如果你在 windows 上使用 mingw和Linux下生成静态库的方法是一样的。嵌入式物联网资料分享交流群707159742 入群有全套学习视频资料电子书免费赠送参考资料静态库的制作_Linux库的实现与应用_嵌入式开发工程师www.makeru.com.cn动态库的制作_Linux库的实现与应用_嵌入式开发工程师www.makeru.com.cn