Подтвердить что ты не робот

Как скомпилировать исходный код C без основной функции?

Как я могу скомпилировать исходные файлы C без необходимости добавлять в них функцию main?

Я получаю сообщение об ошибке для файлов .c, которые не имеют основной функции и не хотят добавлять основную функцию только для компиляции.

4b9b3361

Ответ 1

В GCC переключатель -c - это то, что вы хотите.

-c означает "скомпилировать, не ссылаться", и вы получите выходной файл name.o.

Ответ 2

Используйте параметр -c вашего компилятора (работает для GCC, опция, вероятно, идентична для других компиляторов c).

Из справочной страницы GCC:

Когда вы вызываете GCC, он обычно делает предварительная обработка, компиляция, сборка и связывание. "Общие параметры" позволяют остановить этот процесс на промежуточный этап. Например, -c указывает, что не запускать компоновщик. Тогда выход состоит из объекта файлы, выводимые ассемблером.

Эта фаза связывания - это шаг, который ищет main() и жалуется, если он не находит его.

Ответ 3

Предположим, что у вас есть hello.c:

#include<stdio.h>
#include<stdlib.h>
_start()
{
   exit(my_main());
}
int my_main()
{
   printf("Hello");
   return 0;
}

Скомпилировать как:

gcc  -nostartfiles  hello.c 

и вы можете получить из него исполняемый файл.

Ответ 4

Вы можете скомпилировать отдельные файлы без main, но вы не можете их связать и, конечно же, не сможете их запускать, так как они не являются полными программами. Обратите внимание: valgrind - это не инструмент статического анализа, а инструмент времени исполнения, поэтому он бесполезен для отдельных единиц перевода, не связанных с исполняемой программой.

Если вы хотите протестировать отдельные файлы, общая практика состоит в том, чтобы включить в каждый файл что-то вроде следующего:

#ifdef UNIT_TEST
int main(int argc, char **argv)
{
    /* unit test code goes here */
}
#endif

И скомпилируйте файл с помощью -DUNIT_TEST.