Неразрешенные внешние факторы при компиляции с помощью FreeType

Я компилирую программу в Visual Studio 2015, используя библиотеку FreeType. Раньше я использовал тот же проект для компиляции статической библиотеки с моим собственным классом Font (и многими другими вещами), используя библиотеку. Все было хорошо, и урок прошел отлично. Однако недавно я изменил проект на приложение Windows, изменив _1 _-> _ 2 _-> _ 3_ на 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 ++, и я также связываюсь с другими библиотеками. Любая помощь приветствуется.


person TheTrueJard    schedule 25.10.2016    source источник


Ответы (3)


Я нашел решение: согласно этой странице MSDN, некоторые неразрешенные внешние элементы могут решается добавлением msvcrt.lib и msvcmrt.lib к дополнительным зависимостям. Я попробовал, и каким-то образом это сработало. Я все еще не понимаю, как это решить проблему. И, честно говоря, я до сих пор не совсем уверен, была ли проблема на самом деле. Если бы кто-нибудь мог помочь мне понять это, я был бы очень признателен.

Примечание.
Подобные проблемы могут быть вызваны ошибочным соответствием флагов конфигурации связи. Вопрос Разрешение LNK4098: defaultlib 'MSVCRT' конфликтует с дает хорошее объяснение Детали вопроса и решение.

person TheTrueJard    schedule 25.10.2016

Думал, что присоединюсь к своему решению - настройка библиотеки времени выполнения была несоответствующей (я связывался с библиотекой, созданной с помощью / MT вместо / MD. Этот параметр находится в разделе C / C ++ -> Создание кода.) _

person John Joseph    schedule 31.05.2017

У меня была такая же проблема. Я исправил это, добавив mvcrt.lib и msvcmrt.lib в дополнительные зависимости и добавив /NODEFAULTLIB:LIBCMT к дополнительной опции в опции компоновщика.

person Ravi Ranjan    schedule 25.01.2017
comment
исправьте тип: msvcrt.lib вместо mvcrt.lib - person Sisir; 21.06.2019