【问题标题】:Unresolved Externals When Compiling With FreeType使用 FreeType 编译时未解决的外部问题
【发布时间】:2024-01-04 16:20:01
【问题描述】:

我正在使用 FreeType 库在 Visual Studio 2015 中编译程序。之前,我使用同一个项目使用库编译了一个带有我自己的 Font 类(和许多其他东西)的静态库。一切都很好,课堂效果很好。但是,我最近将项目更改为 Windows 应用程序,将 Properties->General->Configuration Type 更改为 Application (.exe)。这样,我可以同时编写程序和编辑代码,而无需复制所有 20 多个文件。

在编写了我的简单程序(与问题无关)并尝试重新编译后,我遇到了许多以前没有遇到的错误。它们如下:

LNK2001 未解析的外部符号 __imp__strncpy [...]\freetype.lib(ftbase.obj)

LNK2001 无法解析的外部符号 __imp__fread [...]\freetype.lib(ftsystem.obj)

LNK2001 未解析的外部符号 __imp__realloc [...]\freetype.lib(ftsystem.obj)

LNK2001 未解析的外部符号 __imp__strstr [...]\freetype.lib(truetype.obj)

LNK2001 未解析的外部符号 __except_handler4_common [...]\MSVCRT.lib(_chandler4gs_.obj)

网上关于这些的信息似乎很少,更不用说这个特殊的案例了。当我编译为静态库时一切都很好。我之前已经切换到编译.exe,然后它也工作得很好。我过去处理过未解决的外部问题,但这似乎令人费解。

我正在链接 #pragma comment(lib, "freetype.lib")freetype.lib 存在并且在正确的目录中。

我包括:

#include <ft2build.h>
#include FT_FREETYPE_H

如果重要的话,我的程序是用 C++ 编写的,并且我也在链接其他库。任何帮助表示赞赏。

【问题讨论】:

    标签: visual-studio-2015 linker unresolved-external freetype


    【解决方案1】:

    我找到了解决方案:according to this MSDN page,一些未解决的外部问题可以通过在附加依赖项中添加msvcrt.libmsvcmrt.lib 来解决。我试过了,不知何故,它奏效了。我仍然对这将如何解决问题感到困惑。而且,坦率地说,我仍然不太确定问题是否真的存在。如果有人能帮助我理解这一点,将不胜感激。

    注意:
    链接配置标志中的不匹配可能会导致类似问题。问题Resolving LNK4098: defaultlib 'MSVCRT' conflicts with 很好地解释了问题细节和解决方案。

    【讨论】:

      【解决方案2】:

      我想我会加入我的解决方案 - 运行时库设置不匹配(我链接的是使用 /MT 而不是 /MD 构建的库。该设置位于 C/C++->代码生成部分。) _

      【讨论】:

        【解决方案3】:

        我遇到了同样的问题。我通过在附加依赖项中添加 mvcrt.libmsvcmrt.lib 并将 /NODEFAULTLIB:LIBCMT 添加到链接器选项中的附加选项来解决此问题。

        【讨论】:

        • 请更正类型:msvcrt.lib 而不是mvcrt.lib