web-dev-qa-db-fra.com

LNK2038: incompatibilité détectée pour 'RuntimeLibrary': la valeur 'MT_StaticRelease' ne correspond pas à la valeur 'MD_DynamicRelease' dans fichier.obj

J'intègre Matlab, C et Cuda ensemble dans un projet. J'ai utilisé Matlab Mix afin de connecter la fonction matlab mx écrite en c à la bibliothèque d'exécution Cuda. Une erreur de liaison apparaît à propos du conflit dans la version statique et de la version dynamique entre le fichier c et la bibliothèque. Quelqu'un peut-il résoudre ce problème? 

error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MT_StaticRelease' doesn't match value 'MD_DynamicRelease' in file.obj. 
36
Ahmed Hassan

La bibliothèque et votre projet doivent être liés aux mêmes paramètres en ce qui concerne la bibliothèque C Runtime.

Dans votre cas, l'un était lié au CRT DLL (/ MD) et l'autre était lié de manière statique (/ MT).

Vous devez simplement vous assurer que les deux correspondent et cette erreur disparaîtront.

46
tux3

Cette erreur peut se produire lorsque vous reliez statiquement votre projet à une bibliothèque (généralement un fichier avec l'extension .lib) mais que le paramètre de l'éditeur de liens de votre projet Visual Studio est défini sur dynamiquement link ( ce qui signifie que le lien se produira pendant l'exécution, généralement avec un fichier .dll).

Pour définir cela, vous devez faire en sorte que le projet utilise une liaison statique, lancez Visual Studio. Dans le volet Explorateur de solutions, cliquez avec le bouton droit de la souris sur le nom du projet et sélectionnez Propriétés. Développez les propriétés comme indiqué dans l'illustration ci-dessous: C/C++ -> Génération de code -> Bibliothèque d'exécution, sélectionnez l'option Multi-threaded (/MT) dans le menu déroulant .  enter image description here

27
Rahav

à des fins de partage.

J'utilise la version 2017 VS qui ouvre et exécute avec succès une ancienne solution 2008. Maintenant, si pour une raison quelconque, même si vous modifiez toutes vos bibliothèques et votre projet principal pour qu'ils aient le même paramètre de bibliothèque d'exécution (sous propriétés, voir les affiches ci-dessus) mais que vous obtenez toujours le même message d'erreur, essayez d'ouvrir chaque fichier .vcxproj . Recherchez sous "RuntimeLibrary" et donnez la même valeur à tous les fichiers vcxproj. Pour une raison quelconque, ces fichiers vcxproj ne sont jamais mis à jour avec la même valeur que celle indiquée dans les paramètres de propriétés et je dois les modifier manuellement dans vcxproj.

Si vous le souhaitez, vous pouvez également ouvrir les fichiers vcproj et modifier leur "RuntimeLibrary" pour qu'elle soit identique. Ici la valeur est en chiffre.

3
GWKit

Cela fonctionnerait mieux comme commentaire à GWKit mais je n’ai pas la réputation de le faire. Il mentionne la nécessité de mettre à jour les fichiers vcxproj car ils ne changent pas réellement. Dans mon cas, ils ne sont enregistrés qu'après avoir cliqué sur "saveAll", puis fermé Visual Studio. J'ai reçu une invite me demandant si je voulais enregistrer les modifications apportées aux propriétés qui avaient été enregistrées et après avoir cliqué sur Oui, les fichiers vcxproj avaient été correctement mis à jour.

0
Jonah Simon