C++ 的静态库链接问题(虚幻引擎 5 项目)

问题描述 投票:0回答:1

所以我尝试在我的项目中使用 utf8proc 库。我使用 cmake 构建了该库,它创建了一个静态 lib 文件 (utf8proc_static.lib),我使用 PublicAdditionalLibraries.Add 在 Build.cs 文件中引用该文件。它似乎可以识别该库,因为如果我对路径进行更改,它会立即抱怨找不到该文件,因此在这方面一切似乎都很好。我还使用 PublicIncludePaths.Add 包含了头文件 utf8proc.h 的位置。

在我想使用库的 cpp 中,我使用 #include ,一切似乎都很好,因为我可以使用 control+lmb 访问 utf8proc.c 文件中每个函数的定义。然而,当我构建项目时,它告诉我有 5 个未解决的外部问题,并且我收到了 5 个 LNK2019 错误,如下所示:

Error  LNK2019 unresolved external symbol __imp_utf8proc_iterate referenced in function "class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,class std::allocator<wchar_t> > __cdecl convertToUnicode(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?convertToUnicode@@YA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z)

我已经排查问题一段时间了,但我似乎无法弄清楚问题的根源。我正在使用其他 dll 和库,并且任何其他库都没有问题。我认为这是我正在使用的唯一静态库。

我尝试删除 UE 的二进制文件和中间文件夹并重新生成 Visual Studio 项目文件。尝试通过 VS22 项目设置将包含 .lib 和 .h 文件的文件夹添加到 VC++ 目录。出于绝望,我还尝试将 lib 文件移至 UE 项目的 Binaries/Win64 文件夹,并且我还尝试包含 utf8proc 的子文件夹之一,其中包含更多 h 和 c 文件,但什么也没有。

我已无计可施。任何帮助将不胜感激。

c++ static-libraries unreal-engine5
1个回答
0
投票

这里的线索是你未解析的名字中的 __imp 。这意味着您的编译器告诉链接器您想要动态链接。 'Imp' 启动用于导入,在 Windows 平台上动态链接通常通过导入库完成。

从 utf8proc.h 头文件来看,解决方案似乎是在包含头文件之前添加

#define UTF8PROC_STATIC
(您还可以添加编译器选项来定义此符号)。

我在任何地方都找不到官方文档,但我希望它会起作用。

© www.soinside.com 2019 - 2024. All rights reserved.