Конфликты связывания статической библиотеки (/MT) с опцией project /MTd

#c #compilation #linker-errors #static-linking #mysql-connector-c

#c #Сборник #компоновщик -ошибки #статическое связывание #mysql-connector-c

Вопрос:

Мой проект связывает множество статических библиотек. Все они ранее хорошо связывались, но теперь я добавил библиотеку mysql c api, и теперь я получаю подобные ошибки:

mysqlclient.lib (client_authentication.obj): ошибка LNK2038: обнаружено несоответствие для «_ITERATOR_DEBUG_LEVEL»: значение «0» не соответствует значению «2» в mysql_database_connection.obj
mysqlclient.lib (client_authentication.obj): ошибка LNK2038: обнаружено несоответствие для «RuntimeLibrary»: значение «MT_StaticRelease» не совпадаетзначение «MTd_StaticDebug» в mysql_database_connection.obj

Но только если я создаю проект с опцией MTd библиотеки времени выполнения MSVC (я использую эту опцию библиотеки времени выполнения для разработки). Другие статические библиотеки хорошо связываются. Я могу исправить ошибки, изменив MTd на MT, но я хочу использовать MTd. Почему другие статические библиотеки ссылаются нормально? Параметры компиляции были одинаковыми (библиотеки, скомпилированные мной), опция MT для всех библиотек, но только mysql c api не может быть связан с опцией MTd моего проекта. Почему?
Заранее спасибо!

Ответ №1:

Ошибка указывает на конфликт между библиотеками CRT, используемыми в вашем проекте ( /MTd многопоточная статическая отладка), и библиотеками, используемыми статически связанной библиотекой ( /MT многопоточный статический выпуск). Это условие ошибки, потому что один модуль (EXE или DLL) может иметь / использовать только одну копию CRT.

Из /MD, /MT, /LD (используйте библиотеку времени выполнения) примечания:

Все модули, переданные при данном вызове компоновщика, должны быть скомпилированы с использованием одного и того же параметра компилятора библиотеки времени выполнения

Чтобы исправить ошибку, либо создайте проект с /MT помощью (конфигурация выпуска), либо перестройте статическую библиотеку с /MTd помощью (конфигурация отладки) и вместо этого свяжитесь с этой библиотекой отладки.

Библиотеки, которые не используют среды выполнения MSVC, не затрагиваются и могут использоваться как с отладочными, так и с релизными сборками без проблем.