Yo soy la Integración de Matlab, C y Cuda juntos en un proyecto. He utilizado Matlab mezcle con el fin de conectar matlab mx función escrita en c con el cuda runtime library, una vinculación de error aparecen sobre el conflicto en versión estática y dinámica de la liberación entre el c y el archivo de la biblioteca. ¿Alguien puede solucionar esto?

error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MT_StaticRelease' doesn't match value 'MD_DynamicRelease' in file.obj. 
  • Me enfrenté a este error al escribir un WINAPI VC++ programa, después de que hice #include <vector> . Siempre estoy sorprendido por la incompatibilidad de la API de Microsoft con la mayoría de características de C++ estándar.
  • Tal vez estoy demasiado acostumbrado a Linux, programación en C++, donde estas cosas «Sólo el trabajo (TM)». Tratando de adaptarse a mi Linux programaciones habilidades en el código completo de la SEH era un infierno, y realmente me terminó de quitar todos los SEH código y usando el estándar de la excepción del sistema. Podría haber sido relacionados con el uso de vector::at en lugar de vector::operator [] (la primera se puede tirar, el último no).
InformationsquelleAutor Ahmed Hassan | 2015-03-05

5 Comentarios

  1. 51

    La biblioteca y el proyecto debe estar vinculada con los mismos ajustes con respecto a la C Runtime Library.

    En su caso uno está vinculado a la CRT DLL (MD) y la otra se enlaza estáticamente (/MT).

    Sólo necesita para asegurarse de que ambos coinciden y este error va a desaparecer.

    • ¿Qué es la ‘razón’ para el requisito de que todos los archivos de origen ha sido compilado con el símbolo de preprocesador _DEBUG definido? Lo inhibe para compilar una unidad de compilación para ser compilado para la versión para los efectos de la performance?
    • Se puede compilar diferentes unidades de compilación con diferentes símbolos de preprocesador definido. Que no enlace con las diferentes versiones de la CRT/C++ del Estándar de la Biblioteca, como se explica en el enlace en esta respuesta. Los símbolos de preprocesador no de control, que CRT con una biblioteca/enlaces de aplicaciones contra. Esto es controlado por interruptores de línea de comandos que se pasan al vinculador.
    • ¿Cómo se puede cambiar en la interfaz de usuario?
    • Haga clic en proyecto -> Propiedades -> C/C++ -> la Generación de Código. La opción de vínculo aparece allí.
  2. 37

    Este error puede producirse cuando se estáticamente la vinculación de su proyecto con una biblioteca (normalmente un archivo .lib extensión), pero la utilidad de configuración en el proyecto de Visual Studio se establece en dinámicamente enlace (el enlace se produce durante el tiempo de ejecución, por lo general con un .archivo dll).

    Para definir que necesita el proyecto para el uso de la vinculación estática de inicio Visual Studio. En el el Explorador de soluciones panel, haga clic en el nombre del proyecto y seleccione Propiedades. Expanda las propiedades como se muestra en la siguiente figura: C/C++ –> Generación de Código –> Biblioteca de tiempo de ejecución, seleccione la Multi-threaded (/MT) opción en el menú desplegable.
    LNK2038: desajuste detectado por 'RuntimeLibrary':

    • Esto no soluciono el error de Gravedad Código Descripción Archivo de Proyecto de la Línea de Supresión de Estado de Error LNK2038 desajuste detectado por ‘RuntimeLibrary’: «el valor MD_DynamicRelease’ no coincide con el valor de ‘MT_StaticRelease’ en la Calibración.obj OpenARK-SDK C:\OpenARK\OpenARK-SDK\libboost_system-vc140-mt-1_61.lib(codigo_error.obj) 1
  3. 4

    para compartir propósito.

    Estoy usando 2017 VS versión que ha logrado abrir y ejecutar un viejo de 2008 de la solución. Ahora, si por alguna razón, incluso si cambia todas las librerías y su principal proyecto para tener la misma biblioteca de tiempo de ejecución param (en propiedades, ver arriba carteles), pero usted todavía está recibiendo el mismo mensaje de error, intente abrir cada individuo .archivo vcxproj. Busca por «RuntimeLibrary» y hacer de su valor mismo a lo largo de todo el vcxproj archivos. Por alguna razón, estos vcxproj archivos nunca actualización para el mismo valor que he dicho en la configuración de propiedades y tengo que cambiar manualmente en la vcxproj.

    Opcionalmente, si se desea, abra vcproj archivos y cambiar su «RuntimeLibrary» a ser la misma. Aquí el valor es de dígitos.

  4. 0

    Que esto iba a funcionar mejor como un comentario a GWKit pero no tengo la reputación de la misma. Él menciona la actualización de la vcxproj archivos porque no cambian. En mi caso que sólo se salvó después de golpear «saveAll» y, a continuación, cierre visual studio. Tengo una pregunta si quiero guardar los cambios en las propiedades que se salvaron, y después de hacer clic en sí, el vcxproj archivos se han actualizado correctamente.

  5. 0

    Como otros han mencionado la biblioteca de tiempo de ejecución interruptor de cl.exe deben coincidir entre todos los módulos compilados. En MSBuild esto se hace referencia como ClCompile>/RuntimeLibrary.

    Sin embargo, incluso si estos coinciden, usted todavía puede experimentar este problema si no hay un «#undef de DEPURACIÓN» o «#undef _DEBUG» en algún lugar de tu proyecto. El yvals.h encabezado que es parte de la VC++ runtime library encabezados puede cambiar lo que está compilado en sus archivos obj si estas macros se cambian.

    Uso «dumpbin todos los foo.obj >foo.txt» para comprobar lo que realmente está pasando en sus archivos obj. Busque el encabezado «Enlazador de Directivas» en esa salida.

Dejar respuesta

Please enter your comment!
Please enter your name here