如何在VS 2010中自动链接依赖项的依赖项
How can I automatically link in the dependency of a dependency in VS 2010?
我正在使用Visual Studio 2010,有很多项目和解决方案文件。 但是现在我发现自己对ProjectReferences有点依赖地狱:
- 项目
Simple
生成静态库。 - 项目
Foo
和Bar
依赖于Simple
,并且还产生静态库。 - 项目
Module
依赖于Foo
并生成 DLL。 - 项目
Module2
依赖于Bar
并生成 DLL。
所以依赖树看起来像这样:
Simple
|
____________/ __________
| |
Foo Bar
| |
Module Module2
有了ProjectReferences
,我可以让Module
依赖Foo
并自动链接Foo.lib
。 这工作正常。
但是,有没有办法让Module
自动链接Simple.lib
?
似乎这应该是可能的。 Module
取决于Foo
,这取决于Simple
,所以看起来它应该能够有一个"链接在我的参考文献和我的参考文献的参考文献的输出中"的选项。 但我找不到任何可以让我这样做的东西。
"链接库依赖项"选项不会执行此操作。 它只在 Foo.lib 中链接,然后我收到有关未解析的外部符号(在 Simple.lib 中定义的符号(的链接错误。
将"链接库依赖项"设置为true
Foo
-> Simple
和 Bar
-> Simple
引用似乎一开始有效,直到您有一个同时使用 Foo
和 Bar
的项目。 该设置实际上将Simple.lib
嵌入Foo.lib
和Bar.lib
中,然后如果您尝试同时使用 Foo.lib
和 Bar.lib
,则会出现"符号已定义"错误。 这是正确的错误 - 我实际上不想将Simple.lib
放入任何其他库。
我可以添加一个从Module
到Simple
的ProjectReferece
,但是在每个使用Foo
的项目中设置这很乏味,并且违反了Foo
的封装。 Module
应该不需要了解Simple
。 显然链接器需要了解Simple
,但它应该能够通过遵循项目引用来弄清楚。
这很重要的原因如下:假设在维护期间创建了一个新项目:Basic
,这将创建一个静态库,Simple
依赖于Basic
。 现在我们必须更新每个具有ProjectReference
的项目,可以直接或通过另一个ProjectReference Simple
(在本例中,只有两个项目,Module
和Module2
,但实际上它是几十个(。 这很乏味。
有没有办法自动链接我的依赖项的静态库?
显然,这是Visual Studio 2010中的一个错误:https://connect.microsoft.com/VisualStudio/feedback/details/638534/unresolved-externals-when-build-a-vc-project-with-chained-static-lib-dependencies#details
不幸的是,Microsoft关闭了该错误作为"修复" - 这并不完全正确。 这更像是一种解决方法,但这不是我认为真正的解决方案。 (真正的修复是补丁或服务包,而不是需要在每台计算机上手动调整的东西(。
"修复"是执行以下操作:
修改%ProgramFiles(x86)%MSBuildMicrosoft.cppv4.0Microsoft.CPPBuild.Targets
并更改行:
<Target Name="GetResolvedLinkLibs" Returns="@(LibFullPath)"
DependsOnTargets="$(CommonBuildOnlyTargets)">
自
<Target Name="GetResolvedLinkLibs" Returns="@(LibFullPath)"
DependsOnTargets="$(CommonBuildOnlyTargets);ResolvedLinkLib">
因此,只需添加 ;已解析链接库部分到该文件。 然后 VS 将链接依赖项的依赖项。
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- VS 2015 链接错误 无法构建依赖于 libcurl 的项目
- 使用Bazel构建具有不同编译器/链接器选项的C/C++依赖关系
- 在链接可执行文件之前查找静态库未解析的依赖项
- aarch64动态链接器rpath使用辅助依赖链接
- 链接二进制库或共享库时,为什么必须传入我依赖的共享库?
- 单独库中的类成员函数定义和链接依赖项
- 可视C++ - 从链接器>输入>其他依赖项中排除文件
- 链接共享库依赖项未在 ldd 中列出
- 您如何将所有链接依赖项都包装到一个Linux静态库中
- 模板或链接接缝依赖注入有哪些替代方案来测试非虚拟方法?
- 使用C 中的链接seam break static变量依赖关系
- GHC 不链接依赖项
- C++ 生成文件不编译依赖项/链接错误?
- 模型依赖关系目标,在运行时链接
- 视觉如何引用部署与2015 C 链接库依赖关系
- 将库与NuGet包链接为Visual Studio中的依赖项
- Cmake不会将共享库的链接依赖关系传播到我的可执行文件
- 链接自身依赖于静态库的静态库时未定义的引用
- 如何在二进制文件中包含共享库依赖项(不使用.deb或.rpm)和/或针对PulseAudio的静态链接