Oldukça büyük bir C ++ paylaşılan nesne kitaplığı yazıyorum ve hata ayıklamayı bir acı haline getiren küçük bir sorunla karşılaştım:
Bir başlık dosyasında bir işlev / yöntem tanımlarsam ve bunun için bir saplama oluşturmayı unutursam (geliştirme sırasında), yürütülebilir bir dosya yerine paylaşılan bir nesne kitaplığı oluşturduğum için, derleme sırasında bana sahip olduğumu söyleyen hiçbir hata görünmez bu işlevi uygulamayı unuttum. Bir şeyin yanlış olduğunu bulmamın tek yolu çalışma zamanında, bu kitaplığa bağlanan bir uygulamanın sonunda bir 'tanımsız sembol' hatasıyla düştüğü zamandır.
Derleme sırasında ihtiyacım olan tüm sembollere sahip olup olmadığımı kontrol etmenin kolay bir yolunu arıyorum, belki de Makefile'ıma ekleyebileceğim bir şey.
nm -C -U
Bulduğum bir çözüm, tanımlanmamış tüm referansların karmaşık bir listesini elde etmek için derlenmiş kitaplığı çalıştırmaktır . Sorun, bu aynı zamanda, GLibC gibi diğer kütüphanelerde bulunan ve son uygulama bir araya getirildiğinde elbette bu kitaplıkla birlikte bağlanacak olan tüm referansların listesiyle birlikte gelir. Çıktısını kullanmak mümkün olacaktır nm
için grep
tüm başlık dosyaları içinden ve herhangi birinin adını karşılık gelen olmadığını görmek .. ama bu deli görünüyor. Elbette bu nadir bir sorun değil ve bunu çözmenin daha iyi bir yolu var mı?
nm -C -u
beni defalarca kurtardı! (-u
sistemimdeki küçük harfe dikkat edin .) Bu yorumu buraya bırakarak, bir dahaki sefere ihtiyacım olduğunda bulabilirim.