繁体   English   中英

将库与 NuGet 包链接为 Visual Studio 中的依赖项

[英]Linking Libraries with NuGet Packages as dependencies in Visual Studio

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

#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的错误libboost_log-vc140-mt-gd-1_63.lib

静态链接时,我希望将此库烘焙到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>

在一个更大的项目中,在将 boost 切换为动态链接后,这种方法开始崩溃。

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

请注意,“链接库依赖项”设置在这里没有任何作用,使用此设置需要一个与 NuGet 不兼容的项目设置。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM