Компиляция программы без многопоточной DLL (Visual C ++ 2010) - PullRequest
0 голосов
/ 05 февраля 2012

По умолчанию Visual Studio компилирует проект для использования многопоточной DLL, найденной во время выполнения Visual Studio. Я хочу скомпилировать свою программу, используя только / MT вместо / MD. Конечно, это установлено в большинстве систем, и оно также доступно для распространения.

Когда я меняю / MD на / MT, я получаю ошибку:

MSVCRTD.lib (MSVCR100D.dll): ошибка LNK2005: _free уже определено в LIBCMT.lib (free.obj)

И четыре или пять подобных ошибок. Чтобы попытаться это исправить, я удалил LIBCMT.LIB из библиотек по умолчанию.

Я тогда получаю ошибку:

libcpmt.lib (_tolower.obj): ошибка LNK2019: неразрешенный внешний символ __calloc_crt, на который ссылается функция __Getctype

Удаление MSVCRTD.lib из списка по умолчанию приводит к подобным ошибкам? Следует отметить, что: -Это проект OpenGL, использующий библиотеку glfw . -Я использую библиотеку изображений SOIL от lonesock для загрузки текстур.

1 Ответ

3 голосов
/ 05 февраля 2012

Без дополнительной точной информации я бы сказал, что ваша первая проблема в том, что вы как-то смешиваете релизные и отладочные версии библиотек. MSVCRTD.lib является отладочной версией MSVCRT.lib.

Либо у вас есть какие-то настройки отладки в ваших собственных проектах, либо вы связываетесь с отладочными версиями библиотек, которые вы используете.

Никогда не смешивайте отладочную и выпускную версии. Если вам повезет, вы получите такую ​​ошибку. В некоторых редких ситуациях кажется, что все магически работает, пока не сработает.

...