Estoy usando Visual C++ 2008, SP1. Tengo una aplicación QT (gui, .exe) en la configuración de compilación de depuración. Está configurado para usar la versión DLL de depuración de subprocesos múltiples del CRT, también conocido como MSVCRTD.lib.¿Cómo se construye un .exe de depuración (MSVCRTD.lib) contra una versión lib liberada (MSVCRT.lib)?
Estoy vinculando contra una biblioteca de terceros que está construida en modo de lanzamiento y utilizando la versión de DLL multiproceso (sin depuración) de la CRT, también conocida como MSVCRT.lib.
Se vincula y se ejecuta, pero se bloquea al inicio. Mientras enlazo recibo la advertencia:
LINK: advertencia LNK4098: defaultlib 'MSVCRT' entra en conflicto con el uso de otras librerías; uso/NODEFAULTLIB: Biblioteca
Intenté fijar /NODEFAULTLIB:msvcrt.lib
pero que dio lugar a 5 que une los errores debidos a los símbolos que faltan.
Entonces, ¿no es posible utilizar dos bibliotecas diferentes? ¿Cuál es la alternativa? ¿Puedo crear una DLL de la biblioteca de terceros que tengo? ¿O es algo que la tercera parte tendría que hacer?
La excepción es en el arranque:
"excepción no controlada en ....... en MyApp.exe: ...... Acceso violación lugar de leer 0x00000000f"
La siguiente es la pila de llamadas después de la aplicación se ejecuta y se bloquea:
MyApp.exe!std::_Aux_cont::_Getcont() + 0xa bytes C++
MyApp.exe!std::_Iterator_base_aux::_Getmycont() + 0x1b bytes C++
MyApp.exe!std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned int,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,unsigned int> >,0> >::const_iterator::operator*() + 0x28 bytes C++
MyApp.exe!std::_Tree<std::_Tmap_traits<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned int,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,unsigned int> >,0> >::iterator::operator*() + 0xf bytes C++
MyApp.exe!std::map<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,unsigned int,std::less<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >,std::allocator<std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const ,unsigned int> > >::operator[]() + 0xe9 bytes C++
MyApp.exe!ThirdPartyLib::client::`anonymous namespace'::init_xlt_mode() + 0x5f bytes C++
[email protected]() + 0x8d8f3 bytes C++
msvcr90d.dll!_initterm(void (void)* * pfbegin=0x006c4468, void (void)* * pfend=0x006cb0b8) Line 903 C
MyApp.exe!__tmainCRTStartup() Line 501 + 0xf bytes C
MyApp.exe!WinMainCRTStartup() Line 403 C
kernel32.dll!7c817067()
¿Qué errores estás obteniendo en el arranque? – LeopardSkinPillBoxHat
Hola, acabo de actualizar la publicación original anterior con más detalles y una respuesta a su pregunta. – ApplePieIsGood