2012-02-05 2 views
0

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

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

MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _free already defined in LIBCMT.lib(free.obj)

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

Затем я получаю сообщение об ошибке:

libcpmt.lib(_tolower.obj) : error LNK2019: unresolved external symbol __calloc_crt referenced in function __Getctype

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

+1

Каковы ваши настройки сборки? Поскольку MSVCRTD является отладочной версией MSVCRT. – Bart

+1

Возможный дубликат [Разрешение LNK4098: defaultlib «MSVCRT» конфликтует с] (http://stackoverflow.com/questions/3007312/resolving-lnk4098-defaultlib-msvcrt-conflicts-with) –

ответ

3

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

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

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

Смежные вопросы