Al construir proyectos en C++, he encontrado que los errores de enlace de depuración son complicados, especialmente al seleccionar el código de otras personas. ¿Qué estrategias usan las personas para depurar y corregir los errores de enlace?Mejores prácticas para la depuración de errores de enlace
Respuesta
No estoy seguro de cuál es su nivel de experiencia, pero estos son los conceptos básicos.
A continuación se muestra un error de engarce de VS 2005 - sí, es un desastre gigante si no está familiarizado con él.
ByteComparator.obj : error LNK2019: unresolved external symbol "int __cdecl does_not_exist(void)" ([email protected]@YAHXZ) referenced in function "void __cdecl TextScan(struct FileTextStats &,char const *,char const *,bool,bool,__int64)" ([email protected]@[email protected]@[email protected])
Hay un par de puntos para centrarse en:
- "ByteComparator.obj" - Busque un archivo ByteComparator.cpp, este es el origen del problema enlazador
- "int does_not_exist __cdecl (void)" - este es el símbolo que no pudo encontrar, en este caso una función llamada does_not_exist()
en este punto, en muchos casos la forma más rápida de resolución es la búsqueda t El código base para esta función y encuentra dónde está la implementación. Una vez que sepa dónde se implementa la función, solo tiene que asegurarse de que los dos lugares se vinculen entre sí.
Si usa VS2005, debe usar el menú contextual "Dependencias del proyecto ...". Si está utilizando gcc, buscará en sus archivos make el paso de generación ejecutable (se llama gcc con un grupo de archivos .o) y agregará el archivo .o faltante.
En un segundo caso, es posible que te falte una dependencia "externa", para la que no tienes el código. Las bibliotecas de Win32 muchas veces se implementan en bibliotecas estáticas a las que tiene que vincular. En este caso, vaya a MSDN o "Microsoft Google" y busque la API. En la parte inferior de la descripción de la API, se proporciona el nombre de la biblioteca. Agregue esto a las propiedades de su proyecto "Propiedades de configuración-> Enlazador-> Entrada-> Dependencias Adicionales" lista. Por ejemplo, la función timeGetTime() 'page on MSDN le dice que use Winmm.lib en la parte inferior de la página.
Uno de los errores comunes de enlace que he encontrado es cuando una función se usa de forma diferente a como está definida. Si ve un error de este tipo, debe asegurarse de que cada función que utilice esté declarada correctamente en algún archivo .h.
También debe asegurarse de que todos los archivos fuente relevantes estén compilados en el mismo archivo lib. Un error que me he encontrado es cuando tengo dos juegos de archivos compilados en dos bibliotecas separadas, y hago una llamada cruzada entre bibliotecas.
¿Hay alguna falla que tenga en mente?
Esta llamada cruzada, ¿qué tipo de error le da? – Doug
Las bibliotecas C-runtime a menudo son las principales culpables. Asegurándose de que todos sus proyectos tengan la misma configuración: wrt, single vs multi-threading y static vs dll.
La documentación de MSDN es buena para indicar qué lib necesita una API de Win32 en particular si falta.
Aparte de eso, generalmente se trata de encender la bandera detallada y vadear la salida en busca de pistas.
- 1. Mejores prácticas para la depuración
- 2. Depuración usando gdb - Mejores prácticas
- 3. Mejores prácticas para la depuración Envolvente MVC de ASP.NET
- 4. mejores prácticas de control de errores
- 5. Mejores prácticas para crear un escritor de registro para errores
- 6. Mejores prácticas para control de fuente y corrección de errores
- 7. depuración vtable errores de enlace en GCC
- 8. Registro para ASP.NET - Mejores prácticas
- 9. Mejores prácticas para problemas de Eclipse Vista
- 10. Archivo simple con versiones de lanzamiento y depuración - Mejores prácticas
- 11. Mejores prácticas para C#
- 12. .net ¿Mejores prácticas de diagnóstico?
- 13. mejores prácticas para manejar eventos de IU
- 14. Mejores prácticas para escribir widgets de JavaScript
- 15. Mejores prácticas para procesar errores de la base de datos en CodeIgniter
- 16. Mejores prácticas de Javascript
- 17. Mejores prácticas de Sitecore
- 18. mejores prácticas de ctags
- 19. ¿Mejores prácticas de Flex?
- 20. Mejores prácticas de Maven
- 21. Mejores prácticas para DataBinding en asp.net para la mantenibilidad
- 22. Mejores prácticas de PyLint?
- 23. Mejores prácticas de CoreData
- 24. Mejores prácticas de ActionListener
- 25. Mejores prácticas de NAnt
- 26. Mejores prácticas para cargar archivos en la base de datos
- 27. Mejores prácticas para Magento Deployment
- 28. ¿Mejores prácticas para autoguardar borradores?
- 29. Mejores prácticas para almacenar configuraciones
- 30. Mejores prácticas para la administración de errores en el sitio web en vivo
Bueno, y si encuentro el lugar donde se implementa el método y no veo nada de malo en él, ¿qué debo hacer a continuación? ¿Hay alguna forma de obtener una lista de archivos vinculados?Su respuesta es segura para los principiantes, pero este es el resultado de los primeros 1 para la depuración del enlazador y hay otras causas posibles que el error ortográfico en el nombre de la función. –