Подтвердить что ты не робот

LNK2038: обнаружено несоответствие для "RuntimeLibrary": значение "MT_StaticRelease" не соответствует значению "MD_DynamicRelease" в file.obj

Я объединяю Matlab, C и Cuda вместе в проекте. Я использовал сочетание Matlab для подключения функции matlab mx, написанной на c с библиотекой времени cuda, возникла ошибка связывания в конфликте в статической версии и динамическом выпуске между c файлом и библиотекой. Может ли кто-нибудь решить это?

error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MT_StaticRelease' doesn't match value 'MD_DynamicRelease' in file.obj. 
4b9b3361

Ответ 1

Библиотека и ваш проект должны быть связаны с теми же настройками в отношении библиотеки времени выполнения C.

В вашем случае один был связан с DLL CRT (/MD), а другой был связан статически (/MT).

Вам просто нужно убедиться, что оба совпадения и эта ошибка исчезнет.

Ответ 2

Эта ошибка может возникнуть, если вы статически свяжете свой проект с библиотекой (обычно это файл с расширением .lib), но параметр компоновщика в вашем проекте Visual Studio установлен на динамически (это означает, что ссылка будет возникать во время выполнения, обычно с DLL файлом).

Чтобы определить, что вам нужен проект для статического связывания, запустите Visual Studio. В области обозревателя решений щелкните правой кнопкой мыши имя проекта и выберите "Свойства". Разверните свойства, как показано на рисунке ниже: C/С++ → Генерация кода → Библиотека времени выполнения, выберите опцию Multi-threaded (/MT) в раскрывающемся меню. введите описание изображения здесь

Ответ 3

для совместного использования.

Я использую версию 2017 VS, которая успешно открывает и запускает старое решение 2008 года. Теперь, если по какой-то причине, даже если вы измените все свои библиотеки и ваш основной проект на одинаковый параметр библиотеки времени выполнения (по свойствам, см. Выше постеры), но вы все равно получаете одно и то же сообщение об ошибке, попробуйте открыть каждый отдельный файл .vcxproj, Искать в разделе "RuntimeLibrary" и сделать их значение одинаковым во всех файлах vcxproj. По какой-то причине эти файлы vcxproj никогда не обновляются до того же значения, которое я указал в настройках свойств, и я должен вручную их изменить в файле vcxproj.

При желании, если хотите, откройте файлы vcproj и измените их "RuntimeLibrary", чтобы они были одинаковыми. Здесь значение находится в цифре.

Ответ 4

Это будет лучше работать в качестве комментария к GWKit, но у меня нет репутации. Он упоминает о необходимости обновить файлы vcxproj, потому что они на самом деле не меняются. В моем случае они сохраняются только после нажатия "saveAll" и последующего закрытия Visual Studio. Я получил сообщение с вопросом, хочу ли я сохранить изменения в свойствах, которые были сохранены, и после нажатия "Да" файлы vcxproj были правильно обновлены.

Ответ 5

Как уже упоминалось, переключатель библиотеки времени выполнения на cl.exe должен совпадать между всеми скомпилированными модулями. В MSBuild это называется ClCompile>/RuntimeLibrary.

Однако, даже если они совпадают, вы все равно можете столкнуться с этой проблемой, если в вашем проекте есть "#undef DEBUG" или "#undef _DEBUG". Заголовок yvals.h, который является частью заголовков библиотеки времени выполнения VC++, может изменить то, что скомпилировано в ваши файлы obj, если эти макросы будут изменены.

Используйте "dumpbin/all foo.obj> foo.txt", чтобы проверить, что на самом деле входит в ваши файлы obj. Ищите заголовок "Директивы компоновщика" в этом выводе.