По сути, самый надежный способ - это иметь программу (или, возможно, серию программ), которая формально выполняет каждую функцию. Если одна из программ не может установить связь из-за пропущенного символа, значит, вы глупы.
Полагаю, вы могли бы попытаться что-то сделать, отредактировав копию заголовка в исходный файл (например, конец файла .c
), преобразовав объявления функций в определения фиктивных функций:
Оригинал:
extern int somefunc(void);
Исправленный вариант:
extern int somefunc(void){}
Затем скомпилируйте модифицированный источник с минимальным количеством предупреждений - и игнорируйте все, что связано с «функцией, которая должна возвращать значение, которого нет». Затем сравните определенные символы в объектном файле из исправленного источника с определенными символами в библиотеке (используя nm -g
в Unix-подобных системах). Все, что присутствует в объектном файле, но отсутствует в библиотеке, отсутствует и должно быть предоставлено.
Примечание: если ваш заголовок включает другие ваши собственные заголовки, которые определяют функции, вам нужно обработать все из них. Если ваш заголовок содержит стандартные заголовки, такие как <stdio.h>
, то, очевидно, вы не будете определять такие функции, как fopen()
или printf()
в обычном ходе событий. Поэтому тщательно выбирайте заголовки, которые вы перерабатываете в исходный код.