在Visual Studio

时间:2017-02-04 18:23:37

标签: c++ visual-studio nuget static-libraries

我的控制台项目LinkExample包含main.cpp

#include <Library/Logger.hpp>
int main()
{
    WriteSomething();
    return 0;
}

LinkExample链接名为Library的静态库项目。 Library.Lib已正确关联。

图书馆包含Logger.hpp

#pragma once
void WriteSomething();

Logger.cpp

#include <boost/log/trivial.hpp>
#include <Library/Logger.hpp>

void WriteSomething()
{
    BOOST_LOG_TRIVIAL(trace) << "Trace";
}

NuGet包是:

  <?xml version="1.0" encoding="utf-8"?>
  <packages>
    <package id="boost" version="1.63.0.0" targetFramework="native" />
    <package id="boost_log-vc140" version="1.63.0.0" targetFramework="native" />
  </packages>

LinkExample未构建并显示文件libboost_log-vc140-mt-gd-1_63.lib的错误LNK1104。

当静态链接时,我希望将这个库烘焙到Library,为什么不会发生这种情况,我该如何解决?

我知道我可以将包添加到LinkExample,但这不是长期解决方案。

在解决方案运行之前添加包将包含这些包。

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="boost" version="1.63.0.0" targetFramework="native" />
  <package id="boost_date_time-vc140" version="1.63.0.0" targetFramework="native" />
  <package id="boost_filesystem-vc140" version="1.63.0.0" targetFramework="native" />
  <package id="boost_log-vc140" version="1.63.0.0" targetFramework="native" />
  <package id="boost_system-vc140" version="1.63.0.0" targetFramework="native" />
  <package id="boost_thread-vc140" version="1.63.0.0" targetFramework="native" />
</packages>

在一个较大的项目中,在将提升切换为动态链接后,事情开始逐渐消失。

如何摆脱我的客户库链接lib文件的根本问题?

请注意&#34;链接库依赖关系&#34;设置在此处不执行任何操作,使用此设置将需要与NuGet不兼容的项目设置。

1 个答案:

答案 0 :(得分:2)

这是Visual Studio的默认行为。我们无法直接在链接客户库提供的LinkExample项目中将NuGet包用作依赖项。 Visual Studio只在构建LinkExample项目时加载静态库项目的文件,不会加载静态库项目的依赖项。所以我同意Jeroen Heier,如果你想将这些包用于LinkExample项目,你需要将包添加到LinkExample。