3

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

如:

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

  2. 这是(多重包含)正确的解决方案还是解决方法(即总是存在更合适的方法,即使处理它的方法更难)

4

1 回答 1

13

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

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

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

于 2013-04-11T11:02:03.127 回答