Visual Studio LNK1104,最小的例子

时间:2016-07-05 20:26:38

标签: c++ linker visual-studio-2015

我已经设置了两个解决方案来说明我的问题,共有三个项目。我在调试模式下编译,但即使我在发布模式下编译,我的问题仍然存在。

MyRunnerCore.lib需要3rdParty.lib。为什么呢,我该怎么办呢?

这是一张说明文件夹结构的图片:

SolutionLayout

我的想法是我将第三方构建为lib项目(工作正常)。然后我只使用cpp文件中的lib文件构建MyRunnerCore(工作正常)。最后并非最少我构建一个使用MyRunnerCore.lib(LNK1104)的控制台应用程序。输出窗口显示为:

1>------ Build started: Project: MyRunnerCore, Configuration: Release Win32 ------
1>  Core.cpp
1>  MyRunnerCore.vcxproj -> C:\SO\MyRunner\Release\MyRunnerCore.lib
2>------ Build started: Project: MyRunner, Configuration: Release Win32 ------
2>  main.cpp
2>LINK : fatal error LNK1104: cannot open file '3rdParty.lib'
========== Build: 1 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

以下是带有注释的源文件,指出Project I编辑了一些设置。

ThirdPartyClass.cpp

#include "ThirdParyClass.hpp"
int ThirdParyClass::GenerateNumber()
{ return 4; }

ThirdPartyClass.hpp

#pragma once
class ThirdParyClass
{ public: int GenerateNumber(); };

的main.cpp

//MyRunner Properties:
//Project Dependencies Added MyRunnerCore
//Include Directories Added $(SolutionDir)
//Library Directories Added $(OutDir)
#include <MyRunnerCore\Core.h>
#pragma comment (lib, "MyRunnerCore.lib")

int main() { Core c{}; return c.Run(); }

Core.cpp

#include "Core.h"
//MyRunnerCore Properties:
//Added To Include Path C:\SO\3rdParty
//Added To Library Path C:\SO\3rdParty\Debug
#include <3rdParty\ThirdParyClass.hpp>
#pragma comment(lib, "3rdParty.lib")

int Core::Run()
{ 
    ThirdParyClass tp{};
    return tp.GenerateNumber();
}

Core.h

#pragma once
class Core 
{ public: int Run(); };

为什么链接器需要3rdParty.lib链接?

我是否错过了设置链接器构建MyRunnerCore.lib而没有引用3rdParty.lib的设置?

2 个答案:

答案 0 :(得分:1)

链接器似乎不知道在哪里找到文件ThirdParyClass.lib。在MyRunner的项目设置中,将包含此文件的文件夹添加到链接器下的Additional Library Directories

答案 1 :(得分:0)

正如tsandy所写:

Librarian -> General -> Link Library Dependencies -> Yes

是对的。但是使用以下

#pragma comment (lib, ...)

与此不符。

必须使用

包含库
Librarian -> Additional Libraries -> 3rdParty.lib;%(AdditionalDependencies)

感谢输入的tsandy。