链接库两次和可执行文件的大小

时间:2013-04-11 10:51:09

标签: c++ dependencies static-libraries

在使用静态库编译程序时,我从许多来源(包括SO社区)向我建议将库包含两次。

如:

gcc main.c -lslA -lslB -lslC -lslA -lslB -o final
  1. 这会导致更大的可执行文件(例如,链接器是否足够智能以避免双重包含?)。

  2. 这是(多次包含)适当的解决方案还是一种解决方法(。即。总是存在更合适的,即使是更难处理它的方法)

1 个答案:

答案 0 :(得分:10)

例如,如果slA要求符号由slB解析,但slB需要slA所需的符号,则多次包含库的唯一原因是。链接器执行单个传递来解析符号,但重复您的库实际上会导致该库的第二次传递。它不会改变输出的大小,但也没有必要:

您可以告诉gcc链接器将某些库组合在一起 - 让它执行解析该组中的符号所需的操作,而不是多次显示库。例如:

gcc main.c -Wl,--start-group -lslA -lslB -lslC -Wl,--end-group -o final