VS2013:在同一解决方案中与项目链接时出现LNK1104错误

时间:2015-07-16 19:04:03

标签: c++ visual-studio-2013 hyperlink static-libraries

这可能是关于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的经验,但这是我第一次从头开始构建一个多项目解决方案。

非常感谢。

1 个答案:

答案 0 :(得分:0)

当您说您已完全按照列出的目录添加目录时,您的意思是文件名吗?因为只有目录部分应该存在,即$(SolutionDir)\$(PlatformName)\$(Configuration)\Lib

除此之外,您需要确保项目实际上是按照正确的顺序构建的。 MSBuild很乐意尝试在CA之前(或与之并行)编译B。为此,请使用References属性页(位于Project->Properties->Common Properties下),或使用Project Dependencies对话框(Project->Project Dependencies...)手动强制它。

我应该提到使用项目引用机制是" new"和推荐的管理依赖项的方法 - 它应该自动将引用项目的输出添加为引用项目的输入依赖项,而无需手动指定它们。我自己过去工作并不总是很幸运,但它确实至少可以正确配置依赖链。

为了完整性,请注意只有在编译项目中实际包含任何符号时才会生成.lib文件(因此,如果您的项目为空或者没有定义任何符号,则编译它将不会产生.lib文件,打破了所有依赖项目的构建。)