静态库的制作和问题

一、静态库特点
静态库是指在我们的应用中,有一些公共代码是需要反复使用,就把这些代码编译为“库”文件;在链接步骤中,连接器将从库文件中取得所需的代码,复制到生成的可执行文件中的这种库。(百度百科)
二、如何制作静态库
1、先编译成*.o文件

静态库的制作和问题

2、压缩成*.a静态库文件

静态库的制作和问题

3、可以具体查看*.a文件包含哪些*.o文件

静态库的制作和问题

4、静态库的使用

静态库的制作和问题

其中-L指定静态库的存放位置

三、抛出问题:
1、使用nm 命令行查看main工具具体链接进来哪些函数。按上面静态库的定义,main程序只会链接使用到的函数。真是这样子吗?

静态库的制作和问题

静态库的制作和问题

静态库的制作和问题

静态库的制作和问题

如上,发现main程序链接了没有使用到的funA_one函数,但是也同样链接进来了。

2、那有没有办法可以只链接使用到的函数呢?

静态库的制作和问题

编译的时候添加-ffunction-sections和-fdata-sections选项。
链接的时候传入--gcc-sections选项,再-Wl的,后面不能加空格。

静态库的制作和问题

如果不加这几个编译选项,当*.a静态库很大时,会把很多无用的函数代码链接进程序中,从而占据了程序的代码段和数据段空间。会造成相应的Flash存储空间浪费。

四、整理后的测试代码
https://download.csdn.net/download/sydyh43/12839160