2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 为什么一些linux基础静态库(如libc.a)里面包含那么多目标文件.o呢? 为什么不将这些.

为什么一些linux基础静态库(如libc.a)里面包含那么多目标文件.o呢? 为什么不将这些.

时间:2023-10-23 22:14:06

相关推荐

为什么一些linux基础静态库(如libc.a)里面包含那么多目标文件.o呢? 为什么不将这些.

我们来看个现象:

taoge@localhost Desktop> ar -vt /usr/lib/libc.a | grep printf.orw-r--r-- 399/399 28564 Oct 26 00:26 vfprintf.orw-r--r-- 399/399 988 Oct 26 00:26 vprintf.orw-r--r-- 399/399 1360 Oct 26 00:26 reg-printf.orw-r--r-- 399/399 984 Oct 26 00:26 fprintf.orw-r--r-- 399/399 1016 Oct 26 00:26 printf.orw-r--r-- 399/399 972 Oct 26 00:26 snprintf.orw-r--r-- 399/399 988 Oct 26 00:26 sprintf.orw-r--r-- 399/399 992 Oct 26 00:26 asprintf.orw-r--r-- 399/399 960 Oct 26 00:26 dprintf.orw-r--r-- 399/399 27488 Oct 26 00:26 vfwprintf.orw-r--r-- 399/399 1440 Oct 26 00:26 fxprintf.orw-r--r-- 399/399 1308 Oct 26 00:27 iovsprintf.orw-r--r-- 399/399 964 Oct 26 00:27 fwprintf.orw-r--r-- 399/399 972 Oct 26 00:27 swprintf.orw-r--r-- 399/399 992 Oct 26 00:27 vwprintf.orw-r--r-- 399/399 996 Oct 26 00:27 wprintf.orw-r--r-- 399/399 2524 Oct 26 00:27 vswprintf.orw-r--r-- 399/399 1576 Oct 26 00:27 vasprintf.orw-r--r-- 399/399 1356 Oct 26 00:27 iovdprintf.orw-r--r-- 399/399 2480 Oct 26 00:27 vsnprintf.orw-r--r-- 399/399 3212 Oct 26 00:27 obprintf.otaoge@localhost Desktop>

我们看到, 有这么多类似的.o库, 没有糅合在一个整体的.o库中, 这是为什么呢?

原因我们其实已经说了, 见/stpeace/article/details/52886361《a.out/libTest.so静态链接了libme.a, 为什么存在于libme.a中的符号没有在a.out/libTest.so中出现?》

耦合越低, 链接到最终可执行文件中的库就越少。 如果放在一个大大的.o中, 那么调用printf的时候, 就把其他类printf函数库(如vfprintf.o、vprintf.o等)都链接进去了, 浪费时间, 浪费空间, 没有必要。

OK, 本文先说到这里了。

为什么一些linux基础静态库(如libc.a)里面包含那么多目标文件.o呢? 为什么不将这些.o文件进行提前糅合呢?

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。