【问题标题】:How do I fix LNK2019 errors after adding libpng to a VS2019 C++ project through Nuget?通过 Nuget 将 libpng 添加到 VS2019 C++ 项目后,如何修复 LNK2019 错误?
【发布时间】:2021-04-20 14:19:06
【问题描述】:

我正在创建一个需要使用 libpng 的解决方案。我通过 Visual Studio 2019 的 Nuget 包管理器安装了这个库及其依赖项,包括 并使用库中的函数和宏不会导致错误。但是,如果我尝试构建解决方案,每次对库函数或变量的引用都会出现一个 LNK2019 错误。在我看来,NuGet 未能将库位置添加到链接器属性。我找到了 .lib 文件的位置,但我不知道应该调整哪些设置,以便 Studio 在 NuGet 目录中查找并找到这些文件。

【问题讨论】:

  • 要添加链接文件,请转到项目属性 -> 链接器 -> 输入 -> 附加依赖项并在其中添加库文件。
  • @D-RAJ 谢谢,我也试过了。我将 libpng16.* 和 zlib.* *.lib 和 *.dll 文件添加到附加依赖项,但现在我得到 LNK1104:“无法打开文件 libpng16.lib”。可能会建议我应该将这些文件直接复制到我的项目目录中,但是每次我更改构建配置(例如,在 Debug x64 和 Release x64 之间)时,我是否必须替换这些文件?
  • UPD:链接 *.dll 是不必要的(事实上,它导致了 LNK1107)。我将 *.lib 文件复制到项目目录,并了解了如何在 Debug 和 Release 配置中链接不同的 *.lib 文件,但这不是我正在寻找的确切解决方案。是否可以让 Visual Studio 在 NuGet 放入的目录中查找这些文件?这种解决方法之所以可行,是因为我在这个特定项目中没有使用很多包。
  • 我没有想到您可以在附加依赖项中指定文件夹而不是文件。谢谢!
  • 我最终没有使用 libpng 的 nuget 版本,因为我一直在调用png_write_png(),所以我认为我做错了,并选择避免发布可能具有误导性的答案。尽管它确实帮助我解决了问题所涉及的具体问题,即使佩里的回答对于我的具体案例来说是一个更清洁的解决方案。 @TedLyngmo

标签: c++ visual-studio nuget libpng


【解决方案1】:

自动 nuget 无法将 lib 依赖项添加到 Linker 的问题是 c++ nuget 用于 v140v120 构建工具。如果你的项目是由VS2019创建的,VS默认使用v142构建工具(VS2019)。

您可以查看nuget包<solution_folder>\packages\libpng.1.6.28.1\build\native\libpng.targets中的targets文件(自动导入lib的方法)。

所以这个文件找不到V140V120,(你的VS2019使用V142)将条件设为false,这样自动导入库就永远失败了。这就是原因。

V140VC++2015 build toolV120VC++ 2013 build tool

如果你的PC已经安装了VS2015VS2013,你可以通过右键点击项目Properties更改VS0219的构建工具-- >配置属性-->常规-->将Platfrom Toolset更改为Visual Studio 2015(v140)。

为了更好的解决方案

如果你的电脑只有 VS2019 并且还有更好的解决方法,

您应该安装libpng-v142 nuget 包而不是,它适用于VS2019 VC++

【讨论】:

    猜你喜欢
    • 2022-06-11
    • 2020-03-09
    • 2021-02-04
    • 1970-01-01
    • 2017-02-10
    • 2013-09-18
    • 2012-10-01
    • 2019-09-11
    • 2015-08-12
    相关资源
    最近更新 更多