使用FreeType编译时出现未解决的外部引用问题

4
我正在使用Visual Studio 2015编译一个程序,使用FreeType库。以前,我曾经使用同一项目来编译一个静态库,其中包括我的自定义字体类(和许多其他东西),并使用了该库。一切都很好,这个类工作得很好。然而,最近我将项目更改为Windows应用程序,通过修改属性->常规->配置类型应用程序(.exe)。这样,我就可以同时制作程序并编辑代码,而不必复制所有的20多个文件。
在编写我的简单程序之后(与问题无关),我尝试重新编译,但出现了许多之前没有出现过的错误。它们如下所示:

LNK2001 unresolved external symbol __imp__strncpy [...]\freetype.lib(ftbase.obj)

LNK2001 unresolved external symbol __imp__fread [...]\freetype.lib(ftsystem.obj)

LNK2001 unresolved external symbol __imp__realloc [...]\freetype.lib(ftsystem.obj)

LNK2001 unresolved external symbol __imp__strstr [...]\freetype.lib(truetype.obj)

LNK2001 unresolved external symbol __except_handler4_common [...]\MSVCRT.lib(_chandler4gs_.obj)

似乎网络上几乎没有关于这些问题的信息,更不用说针对这个特定情况的信息了。在编译为静态库时一切正常。我之前已经切换到编译.exe,那时也能正常工作。我以前曾处理过未解决的外部符号,但这似乎是无法解释的。
我使用#pragma comment(lib, "freetype.lib")进行链接。freetype.lib存在并且位于正确的目录中。
我包括以下内容:
#include <ft2build.h>
#include FT_FREETYPE_H

如果有必要,我的程序是用C++编写的,并且还链接了其他库。非常感谢您的帮助。
3个回答

12
我找到了一个解决方案:根据这个MSDN页面,添加msvcrt.libmsvcmrt.lib到其他依赖项可以解决一些未解决的外部函数。我尝试了一下,不知怎么地,它起作用了。但是,我仍然不清楚这如何解决该问题。而且,说实话,我还不确定问题究竟是什么。如果有人能帮助我理解这个问题,我将非常感激。
注意: 类似的问题可能由于链接配置标志不匹配而引起。问题Resolving LNK4098: defaultlib 'MSVCRT' conflicts with提供了关于问题详细信息和解决方案的很好的解释。

6

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


2

我曾经也遇到过同样的问题。我通过在附加依赖项中添加mvcrt.libmsvcmrt.lib以及在链接器选项中的附加选项中添加/NODEFAULTLIB:LIBCMT来解决问题。


1
请更正类型:mvcrt.lib 应为 msvcrt.lib - Sisir

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接