当使用具有自己的静态子依赖项的静态库时,即使不使用任何相关代码,它们是否需要链接?

When using a static lib with its own static sub dependencies, do they need linking against even if not utilising any related code?

提问人:aatwo 提问时间:1/26/2022 更新时间:1/26/2022 访问量:28

问:

我有一个名为MyProject.exe的项目,它依赖于一个名为MyDep.lib的静态库。MyDep.lib 包含一个名为 MyDepFunction() 的函数,该函数使用另一个名为 SubDep.lib 的依赖项中的函数。

据我了解,如果MyDepFunction()从未被MyProject.exe使用的MyDep.lib的任何部分使用,则仅链接到MyDep.lib就足够了。但是,如果MyDepFunction()被MyProject.exe使用的MyDep.lib的某些部分使用,则必须同时链接MyDep.lib和SubDep.lib。

就我而言,MyProject.exe 不使用 MyDep.lib 中调用 MyDepFunction() 的任何代码,并且在 machine1 上仅链接了 MyDep.lib 的 MyProject.exe 构建。但是,在 machine2 上,由于 MyDepFunction() 使用的 SubDep.lib 中的函数是未解析的外部函数,因此存在编译错误!因此,出于某种原因,machine2 需要 MyProject.exe 链接到 SubDep.lib,而 machine1 则不需要。

MyProject.exe 没有使用 MyDepFunction() 是否有可能发生这种情况?或者两台机器上肯定存在一些差异,导致一台使用它而另一台不使用它?

这是在使用 MSVC 的 Windows x64 上。

C++ 器错误 静态链接

评论


答: 暂无答案