Я пишу довольно большую библиотеку разделяемых объектов C ++ и столкнулся с небольшой проблемой, которая затрудняет отладку:
Если я определяю функцию / метод в заголовочном файле и забываю создать заглушку для нее (во время разработки), так как я создаю библиотеку общих объектов, а не исполняемый файл, при сообщении во время компиляции ошибок не возникает Я забыл реализовать эту функцию. Единственный способ узнать, что что-то не так, - это во время выполнения, когда в конце концов приложение, связывающееся с этой библиотекой, падает с ошибкой «неопределенный символ».
Я ищу простой способ проверить, есть ли у меня все символы, которые мне нужны во время компиляции, возможно, что-то, что я могу добавить в свой Makefile.
Одно из решений, которое я нашел, - это запустить скомпилированную библиотеку через nm -C -U
, чтобы получить разобранный список всех неопределенных ссылок. Проблема в том, что это также дает список всех ссылок, которые есть в других библиотеках, таких как GLibC, которые, конечно, будут связаны с этой библиотекой, когда окончательное приложение будет собрано. Можно было бы использовать вывод от nm
до grep
через все мои заголовочные файлы и посмотреть, соответствует ли какое-нибудь из имен ... но это кажется безумным. Конечно, это не редкая проблема, и есть лучший способ ее решения?