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

aia*_*iao 2 c++ dependencies static-libraries

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

如:

gcc main.c -lslA -lslB -lslC -lslA -lslB -o final
Run Code Online (Sandbox Code Playgroud)
  1. 这是否会导致更大的可执行文件(.ie是否足够智能,以避免双重包含?).

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

mah*_*mah 11

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

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

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