在 《Linux 平台基于 C /C++ 的静态库和动态库的区别》 一文中介绍了静态库的特点以及与动态库的区别。那么你有没有想过如何把自己写好的函数接口制作成静态库给别人用呢?本文教你如何制作属于自己的静态库。
1. 编译成可重定位文件
在 《Linux 平台基于 C /C++ 的静态库和动态库的区别》 简单介绍了可重定位文件。其中也有一位非常细心的读者发现,在 Ubuntu18.04 的系统,使用 gcc7.4 编译出来的可执行文件的 type 是 DYN,这是编译器生成了一种位置无关的可执行文件(PIE),它类似于动态库,其地址在加载时确定,从而更加安全。本文不再展开介绍。
本文实例代码 test1.c 代码如下:
#include"test1.h"
void test1()
{
printf("I am test1
");
}
编译成可重定位文件,即生成。o 文件:
$ gcc -c test1.c
$ readelf -h test1.o
ELF Header:
Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
Class: ELF64
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UN