ld链接器问题:--whole-archive选项

--whole-archive我所看到的链接器选项的唯一真正用途是从静态库创建共享库。最近,我遇到了Makefile,在与内部静态库链接时始终使用此选项。当然,这会导致可执行文件不必要地提取未引用的目标代码。我对此的反应是这是完全错误的,我在这里错过了什么吗?

我要解决的第二个问题与我阅读的有关整体存档选项的内容有关,但无法完全解析。--whole-archive如果可执行文件还链接到共享库,而共享库又具有(部分地)与静态库相同的对象代码,则在与静态库链接时应使用该 选项。也就是说,共享库和静态库在目标代码方面有重叠。使用此选项将强制在可执行文件中解析所有符号(无论使用如何)。应该避免目标代码重复。这令人困惑,如果在程序中引用了符号,则必须在链接时唯一地对其进行解析,那么复制有什么用呢?(请原谅我,如果此段不是清晰的缩影)


慕的地8271018
浏览 2231回答 3
3回答

蛊毒传说

我同意使用“ 全归档”构建可执行文件可能不是您想要的(由于链接了不需要的代码并创建了庞大的软件)。如果他们有充分的理由这样做,他们应该已经在构建系统中对其进行了记录,因为您现在可以猜测。至于问题的第二部分。如果可执行文件同时链接了静态库和具有(部分)与静态库相同的目标代码的动态库,则-whole-archive将确保在链接时首选静态库中的代码。当您进行静态链接时,通常这就是您想要的。
打开App,查看更多内容
随时随地看视频慕课网APP