#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, не затрагиваются и могут использоваться как с отладочными, так и с релизными сборками без проблем.