[英]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.