Pregunta

Parece que toda mi vida adulta he sido atormentada por el enlazador VC ++ que se queja o balanceaba porque varias bibliotecas no están de acuerdo en qué versión de la biblioteca de tiempo de ejecución usar. Nunca estoy de humor para dominar ese tema triste. Así que solo trato de meterme con él hasta que funcione. Los mensajes de error nunca son útiles. Tampoco la documentación de Microsoft sobre el tema, al menos para mí.

A veces no encuentra funciones, porque el cambio de nombre no es lo que se esperaba? A veces se niega a mezclar y combinar. Otras veces solo dice: "Enlace: Advertencia lnk4098: defaultlib 'libcmtd' conflictos con el uso de otras libs; use /nodefaultlib: biblioteca" Usar /nodefaultlib no funciona, pero la advertencia parece ser benigna. ¿Qué diablos es "Defaultlib" de todos modos? ¿Cómo decide el enlazador? Nunca he visto una manera de especificar al enlazador qué biblioteca de tiempo de ejecución usar, solo cómo decirle al compilador qué biblioteca crea la función de las llamadas.

Hay programas de "dependencia de Walker" que pueden inspeccionar archivos de objetos para ver de qué DLL dependen. Acabo de ejecutar uno en un proyecto que estoy tratando de construir, y es un verdadero desastre. Hay sistema .libs y .dll que desean versiones de tiempo de ejecución contradictorios. Por ejemplo, Comctl32.Dll quiere msvcrt.dll, pero estoy vinculado con msvcrtd.dll. Estoy buscando para ver si hay un comctl32d.dll, incluso cuando escribo.

Así que supongo que lo que estoy pidiendo es un tutorial sobre cómo resolver esas cosas. ¿Qué haces y cómo lo haces?

Esto es lo que creo que sé. Por favor, corrígeme si algo de esto está mal.

  1. Los parámetros son depuración/lanzamiento, múltiples subprocesos/un solo subpuesto y estático/dll. Solo se cubren seis de las ocho combinaciones posibles. No hay DLL único, ni depuración o lanzamiento.

  2. La configuración solo afecta en qué biblioteca de tiempo de ejecución se vincula (y la convención de llamadas para vincularlo). No tiene que usar un tiempo de ejecución basado en DLL si está construyendo una DLL, ni tiene que usar una versión de depuración de tiempo de ejecución al construir la versión de depuración de un programa, aunque parece ayudar cuando es único- Pasando las llamadas del sistema.

Pregunta de bonificación: ¿Cómo podría alguien o cualquier empresa crear ese desastre?

¿Fue útil?

Solución

Esto parece un poco como tratar de encontrar una respuesta a la pregunta incorrecta, y / o reinventar la rueda.PHP hará su comprobación de usted cuando lanza un error fatal.

Si desea verlo de esa manera, su código en realidad ya funciona.Usted obtiene un error fatal, por lo tanto, la clase principal no existe, por lo tanto, necesita arreglar su código.Habiendo establecido que falta una clase de padres, ¿qué más vas a hacer?Todavía necesitas arreglarlo.

Lo que estoy tratando de decir es que si logró deshacerse del error fatal, no lo consigue en ningún lugar, su código sigue siendo defectuoso, y es probable que se bloquee en algún lugar más adelante en la línea.Claro que podría hacer eco "Tienes un problema" al usuario, pero eso es lo que HABS ya lo hace.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top