Estoy escribiendo una biblioteca de objetos compartidos de C ++ bastante grande y me he encontrado con un pequeño problema que hace que la depuración sea un problema:
Si defino una función / método en un archivo de encabezado y me olvido de crear un código auxiliar para él (durante el desarrollo), ya que estoy construyendo como una biblioteca de objetos compartidos en lugar de un ejecutable, no aparecen errores en tiempo de compilación que me digan que tengo olvidado implementar esa función. La única forma en que descubro que algo está mal es en tiempo de ejecución, cuando finalmente una aplicación que se vincula con esta biblioteca se cae con un error de "símbolo indefinido".
Estoy buscando una manera fácil de verificar si tengo todos los símbolos que necesito en el momento de la compilación, quizás algo que pueda agregar a mi Makefile.
Una solución que se me ocurrió es ejecutar la biblioteca compilada nm -C -U
para obtener una lista exigida de todas las referencias no definidas. 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 utilizar la salida de a nm
a grep
través de todos mis archivos de encabezado y ver si alguno de los nombres corresponde ... pero esto parece una locura. Seguramente este no es un problema poco común y existe una mejor manera de resolverlo.
nm -C -u
me ha salvado varias veces! (tenga en cuenta las minúsculas-u
en mi sistema). Dejo este comentario aquí para poder encontrarlo la próxima vez que lo necesite.