aia*_*iao 2 c++ dependencies static-libraries
在使用静态库编译程序时,我从许多来源(包括SO社区)建议我两次包含该库.
如:
gcc main.c -lslA -lslB -lslC -lslA -lslB -o final
Run Code Online (Sandbox Code Playgroud)
这是否会导致更大的可执行文件(.ie是否足够智能,以避免双重包含?).
这是(多重包含)正确的解决方案还是一种解决方法(.ie总会存在更合适的,即使是更难处理它的方法)
mah*_*mah 11
例如,多次包含库的唯一原因是,如果slA需要解析符号slB但slB需要符号slA.链接器执行单个传递来解析符号,但重复您的库实际上会导致该库的第二次传递.它不会改变输出的大小,但它也没有必要:
您可以告诉gcc链接器将某些库组合在一起 - 让它执行解析该组中的符号所需的操作,而不是多次显示库.例如:
gcc main.c -Wl,--start-group -lslA -lslB -lslC -Wl,--end-group -o final