estoy escribiendo una bastante grande biblioteca de C++-objeto compartido, y se han encontrado con un pequeño problema que hace que la depuración de un dolor:¿Comprobación fácil de símbolos no resueltos en bibliotecas compartidas?
Si defino una función/método en un archivo de cabecera, y se olvide de crear un esbozo de (durante el desarrollo), dado que estoy compilando como una biblioteca de objetos compartidos en lugar de como un archivo ejecutable, no aparecen errores en el tiempo de compilación diciéndome que he olvidado implementar esa función. La única forma en que descubro que algo está mal es en tiempo de ejecución, cuando al final una aplicación que enlaza con esta biblioteca se cae con un error de 'símbolo indefinido'.
Estoy buscando una manera fácil de comprobar si tengo todos los símbolos que necesito en tiempo de compilación, tal vez algo que pueda agregar a mi Makefile.
Una solución que se me ocurrió es ejecutar la biblioteca compilada a través de nm -C -U
para obtener una lista solicitada de todas las referencias indefinidas. El problema es que esto también aparece con la lista de todas las referencias que se encuentran en otras bibliotecas, como GLibC, que por supuesto se vinculará junto con esta biblioteca cuando se prepare la aplicación final. Sería posible usar la salida de nm
a grep
a través de todos mis archivos de encabezado y ver si alguno de los nombres corresponde ... pero esto parece una locura. Sin duda, este no es un problema poco común y hay una mejor manera de resolverlo.
'nm -C -u' me ha salvado varias veces! (fíjese en minúscula '-u' en mi sistema.) Deje este comentario aquí para que pueda encontrarlo la próxima vez que lo necesite. – dpritch