这可能是关于SO的愚蠢问题之一,但我无法解决。
我有一个包含三个项目A,B和C的解决方案.A和B是静态lib项目,C是一个与A和B链接的exe项目。我已经设置了构建目录,以便每个项目的构建工件如下:
A: $(SolutionDir)\$(PlatformName)\$(Configuration)\Lib\A.lib
B: $(SolutionDir)\$(PlatformName)\$(Configuration)\Lib\B.lib
C: $(SolutionDir)\$(PlatformName)\$(Configuration)\Bin\C.exe
由于项目C中内置的exe期望A和B中的库,我已经将库A.lib和B.lib添加到项目C 属性 - >链接器 - >一般 - >附加依赖项。我已完全按照上面列出的方式将A和B的目录位置添加到Project Properties-> Linker-> General-> Additional Libraries Directories 。
链接时,我收到链接器错误 LNK1104:无法打开文件A.lib
有人可以帮忙吗?我有一些使用VS的经验,但这是我第一次从头开始构建一个多项目解决方案。
非常感谢。
答案 0 :(得分:0)
当您说您已完全按照列出的目录添加目录时,您的意思是文件名吗?因为只有目录部分应该存在,即$(SolutionDir)\$(PlatformName)\$(Configuration)\Lib
。
除此之外,您需要确保项目实际上是按照正确的顺序构建的。 MSBuild很乐意尝试在C
和A
之前(或与之并行)编译B
。为此,请使用References
属性页(位于Project->Properties->Common Properties
下),或使用Project Dependencies
对话框(Project->Project Dependencies...
)手动强制它。
我应该提到使用项目引用机制是" new"和推荐的管理依赖项的方法 - 它应该自动将引用项目的输出添加为引用项目的输入依赖项,而无需手动指定它们。我自己过去工作并不总是很幸运,但它确实至少可以正确配置依赖链。
为了完整性,请注意只有在编译项目中实际包含任何符号时才会生成.lib文件(因此,如果您的项目为空或者没有定义任何符号,则编译它将不会产生.lib文件,打破了所有依赖项目的构建。)