【问题标题】:Unresolved externals when using libpng [duplicate]使用 libpng 时未解决的外部问题 [重复]
【发布时间】:2021-04-23 23:57:49
【问题描述】:

这里是VS初学者!

我正在将 libpng 库用于 C++ 项目,该库是我通过 VS 2019 中的 NuGet 安装的。我在renderer.h 中有一个函数loadPng,它沿着manual 的行读取一个png。 png.h 包括在内。代码本身没有错误。错误信息是:

LNK2019 reference to an unresolved external symbole "png_set_sig_bytes" in function ""int __cdecl loadPng(char const *,struct img_format *)" (?loadPng@@YAHPEBDPEAUimg_format@@@Z)"

对于库中的所有函数。

我该如何解决这个问题或者我搞砸了什么? (我想我没有正确设置库..)

如果您需要了解任何具体信息,请询问。

功能:

static int loadPng(const char *filename, img_format *target) {
    FILE* fp;
    fopen_s(&fp, filename, "rb");
    if (!fp) return (ERROR);
    void* tempBuffer[8] = { 0, 0, 0, 0, 0, 0, 0, 0};
    fread(tempBuffer, 1, 8, fp);

    if (png_sig_cmp((png_const_bytep)tempBuffer, 0, 8)) return (ERROR);
.
.
.
    return 0;
}

【问题讨论】:

    标签: c++ visual-studio nuget libpng lnk2019


    【解决方案1】:

    在 MSVC 中,有两种主要类型的错误,

    1. C 开头的错误表明这是一个编译器错误。
    2. LNK 开头的错误表明这是一个链接错误。

    当链接器找不到库或目标文件时,通常会发生类似LNK2019 的错误。所以这意味着您没有将库包含到您的链接器中。

    为此,请转到项目Properties -> Linker -> Input -> Additional Dependencies 并将库文件添加到其中。并且还转到同一Linker 选项卡中的General 并在Additional Library Directories 中添加库文件的路径(例如:“C:\Libs”)。
    或者,您可以将完整文件路径(例如:“C:\Libs\library.lib”)添加到 Linker 选项卡中的 Additional Dependencies

    【讨论】:

    • 似乎解决了我遇到的错误,谢谢!遗憾的是,NuGet 以某种方式无法设置 .dll 文件,现在我必须单独研究。
    • 欢迎您!我对 Nuget 不太熟悉,但请检查这是否有帮助:*.com/questions/40104838/…
    • 再次感谢,我找到了另一个解决方案。对于其他人:我搜索了 .dll 文件并手动将它们复制到 \Windows\System32 和 \Windows\SysWOW64。
    • 您不应该将文件放在这些文件夹中的任何一个中。而是将 dll 与可执行文件放在同一文件夹中。