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