Я пишу досить велику бібліотеку спільних об'єктів C ++ і зіткнувся з невеликою проблемою, яка завдає налагодження біль:
Якщо я визначаю функцію / метод у файлі заголовка та забуваю створити для нього заглушку (під час розробки), оскільки я будую спільну бібліотеку об'єктів, а не виконуваний файл, під час компіляції не виникає помилок, які повідомляють мені, що я маю забули реалізувати цю функцію. Єдиний спосіб виявити, що щось не так, - це час виконання, коли врешті-решт додаток, що посилається на цю бібліотеку, падає з помилкою "невизначений символ".
Я шукаю простий спосіб перевірити, чи є у мене всі символи, які мені потрібні під час компіляції, можливо, щось, що я можу додати до свого Makefile.
Одне з рішень, яке я придумав, - це запустити скомпільовану бібліотеку, nm -C -U
щоб отримати детальний список усіх невизначених посилань. Проблема полягає в тому, що це також призводить до переліку всіх посилань, які є в інших бібліотеках, таких як GLibC, що, звичайно, буде пов’язано з цією бібліотекою при складанні остаточної програми. Можна було б використовувати вивід nm
to grep
через усі мої файли заголовків і перевірити, чи відповідає якесь із імен .. але це здається божевільним. Напевно, це не рідкість, і є кращий спосіб її вирішення?
nm -C -u
рятував мене кілька разів! (зверніть увагу на малі регістри-u
в моїй системі.) Залишаючи цей коментар тут, щоб я міг знайти його наступного разу, коли мені це буде потрібно.