2012-03-15 4 views
0

Можно создать дубликат:
Why is runtime library a compiler option rather than a linker option?Почему опция/MD является компилятором? а не линкер?

я явно не понимаю, почему я должен выбрать тип RTL на этапе компиляции?

Например, я создал одну статическую библиотеку A.lib с опцией/MD. Затем я создал вторую статическую библиотеку B.lib с опцией/MT.

Когда я пытаюсь связать A.lib и B.lib с моим C.exe Я получу ошибку компоновщика.

Но на этапе компиляции (создание A.lib и B.lib) нет причин для разрешения символов из c или C++ runtime.

+2

Связанные. http://stackoverflow.com/questions/521972/why-is-runtime-library-a-compiler-option-rather-than-a-linker-option –

+0

ЭЛТ просто не очень совместима с ним. Самая большая проблема - глобальные переменные, такие как errno. Возвращается к функции с/MD. –

ответ

1

Когда вы строите с помощью /MD, компилятор использует другой набор предопределенных макросов, а затем при построении с /MT. См. documentation и обратите внимание на _MT, _DLL и т. Д. Макросы.

на этапе компиляции (создание A.lib и B.lib) нет никаких причин для разрешения символов из среды c или C++.

Это верно, но если включить любые системные заголовки, ваш препроцессор источник фактически отличается в зависимости от того, какой из /MD, /MT и т.д. флагов вы использовали, и что вопросы очень много на скомпилировать сцену.