Skia的连接错误,无法解析的外部符号(LNK2019: unresolved external symbol)

我在下载了Google的2D图形引擎后,编译了源码,把生成的静态库(lib)文件都放到了自己的工程目录下,并在自己工程的源文件中定义了一个SKBitmap map;的一个对象。在连接时却出现了3个连接错误。
1>TestSkiaDlg.obj : error LNK2019: unresolved external symbol "public: __thiscall SkBitmap::~SkBitmap(void)" (??1SkBitmap@@QAE@XZ) referenced in function "protected: void __thiscall CTestSkiaDlg::DrawSkia(void)" (?DrawSkia@CTestSkiaDlg@@IAEXXZ)
1>TestSkiaDlg.obj : error LNK2019: unresolved external symbol "public: __thiscall SkBitmap::SkBitmap(void)" (??0SkBitmap@@QAE@XZ) referenced in function "protected: void __thiscall CTestSkiaDlg::DrawSkia(void)" (?DrawSkia@CTestSkiaDlg@@IAEXXZ)
1>H:\Local\Visual Studio 2012\Projects\TestSkia\Debug\TestSkia.exe : fatal error LNK1120: 2 unresolved externals

最开始我以为是编译的命名改编的问题,但是我是用同一个编译器编译的库文件和自己建立的工程。我也通过dumpbin工具查看了skia_core.lib库导出的符号。发现两个符号是完全相同的啊!
下面是dumpbin导出的片段:
074 00000000 SECT1C notype External | __real@00000000
075 00000000 UNDEF notype () External | ??0SkBitmap@@QAE@XZ (public: __thiscall SkBitmap::SkBitmap(void))
076 00000000 SECT1D notype Static | .rdata

该回答引用ChatGPT

这个错误通常发生在链接器无法找到所需的函数或变量定义时。在你的情况下,编译器无法找到SkBitmap类的构造函数和析构函数的定义。


有几种可能的原因导致这个问题:

  • 没有正确地链接所需的库文件。请确保你已经在自己的工程中添加了正确的库文件,包括Skia所需的所有库文件,并在链接选项中添加了这些库文件。
  • 你的库文件版本不兼容。请确保你使用的Skia库文件与你的代码相匹配,不要混淆不同版本的库文件。
  • 编译器没有正确地找到库文件。请确保你在自己的工程中设置了正确的库文件搜索路径。
  • 你的代码中存在错误。请确保你正确地使用SkBitmap类,并且在调用其构造函数和析构函数之前已经包含了必要的头文件。

为了解决这个问题,你可以尝试以下几个步骤:

  • 确认你已经正确地链接了Skia库文件,并在链接选项中添加了这些库文件。
  • 检查Skia库文件的版本,并确保它与你的代码相匹配。
  • 确认你已经在自己的工程中设置了正确的库文件搜索路径。
  • 确认你正确地使用了SkBitmap类,并且在调用其构造函数和析构函数之前已经包含了必要的头文件。