Я пытаюсь скомпилировать и запустить следующую программу без main()
функции в C
. Я скомпилировал свою программу, используя следующую команду.Скомпилировать и запустить программу без main() в C
gcc -nostartfiles nomain.c
И компилятор дает предупреждение
/usr/bin/ld: warning: cannot find entry symbol _start; defaulting to 0000000000400340
Хорошо, нет проблем. то я запускаю исполняемый файл (a.out), и операторы printf
печатают успешно, а затем получают ошибка сегментации.
Итак, мой вопрос: Почему ошибка сегментации после успешного выполнения заявлений печати?
мой код:
#include <stdio.h>
void nomain()
{
printf("Hello World...\n");
printf("Successfully run without main...\n");
}
выход:
Hello World...
Successfully run without main...
Segmentation fault (core dumped)
Примечание:
Здесь -nostartfiles
НКУ флаг, компилятор с использованием стандартных файлов запуска при связывании
Я удивлен, что это работает вообще. Честно говоря, я считаю, что это обращение компоновщика ошибочно (или, по крайней мере, Bad Thing): не было точки входа, поэтому линкер просто галлюцинировал его из любой функции. Blech. – imallett
@imallett, по крайней мере, компоновщик был достаточно любезен, чтобы привлечь внимание к нему с предупреждением и объяснить, какое противодействующее действие он принял! Вы правы, что это может быть лучше, чем ошибка, а не просто предупреждение. –
Зачем вам не использовать главный? –