Piszę dość dużą bibliotekę obiektów współdzielonych w C++ i natknąłem się na mały problem, który sprawia, że debugowanie bólu:Łatwe sprawdzanie nierozwiązanych symboli w udostępnianych bibliotekach?
Jeśli zdefiniuję funkcję/metodę w pliku nagłówkowym i zapomnę utworzyć skrót do to (podczas programowania), ponieważ buduję jako bibliotekę obiektów wspólnych, a nie jako plik wykonywalny, podczas kompilacji nie pojawiają się żadne błędy mówiące mi, że zapomniałem wprowadzić tę funkcję. Jedyny sposób, aby dowiedzieć się, że coś jest nie tak, jest w czasie wykonywania, kiedy ostatecznie aplikacja łącząca się z tą biblioteką przewraca się z błędem "niezdefiniowanego symbolu".
Szukam łatwego sposobu sprawdzenia, czy mam wszystkie symbole potrzebne w czasie kompilacji, być może coś, co mogę dodać do mojego pliku Makefile.
Jednym z rozwiązań, które udało mi się wymyślić, jest uruchomienie skompilowanej biblioteki przez nm -C -U
, aby uzyskać demangowaną listę wszystkich nieokreślonych odniesień. Problem polega również na tym, że pojawia się lista wszystkich odniesień znajdujących się w innych bibliotekach, takich jak GLibC, które oczywiście będą połączone razem z tą biblioteką po złożeniu ostatecznej aplikacji. Możliwe byłoby użycie wyjścia z nm
do grep
przez wszystkie moje pliki nagłówkowe i zobaczenie, czy któraś z nazw odpowiada ... ale to wydaje się szalone. Z pewnością nie jest to rzadkość i istnieje lepszy sposób na jej rozwiązanie?
'nm -C -u' uratował mnie wiele razy! (zauważ małymi literami "-u" w moim systemie.) Pozostawiając ten komentarz tutaj, aby móc go znaleźć następnym razem, kiedy go potrzebuję. – dpritch