Как скомпилировать исходный код C без основной функции?
Как я могу скомпилировать исходные файлы C без необходимости добавлять в них функцию main?
Я получаю сообщение об ошибке для файлов .c, которые не имеют основной функции и не хотят добавлять основную функцию только для компиляции.
Ответ 1
В GCC переключатель -c - это то, что вы хотите.
-c означает "скомпилировать, не ссылаться", и вы получите выходной файл name.o.
Ответ 2
Используйте параметр -c вашего компилятора (работает для GCC, опция, вероятно, идентична для других компиляторов c).
Из справочной страницы GCC:
Когда вы вызываете GCC, он обычно делает предварительная обработка, компиляция, сборка и связывание. "Общие параметры" позволяют остановить этот процесс на промежуточный этап. Например, -c указывает, что не запускать компоновщик. Тогда выход состоит из объекта файлы, выводимые ассемблером.
Эта фаза связывания - это шаг, который ищет main() и жалуется, если он не находит его.
Вы можете скомпилировать отдельные файлы без main, но вы не можете их связать и, конечно же, не сможете их запускать, так как они не являются полными программами. Обратите внимание: valgrind - это не инструмент статического анализа, а инструмент времени исполнения, поэтому он бесполезен для отдельных единиц перевода, не связанных с исполняемой программой.
Если вы хотите протестировать отдельные файлы, общая практика состоит в том, чтобы включить в каждый файл что-то вроде следующего:
#ifdef UNIT_TEST
int main(int argc, char **argv)
{
/* unit test code goes here */
}
#endif