Прежде всего, вы не создаете файл объекта но исполняемый файл. Объектные файлы представляют собой промежуточный файл, используемый в качестве входного файла для компоновщика для создания исполняемого файла. То, что вы называете его суффиксом .o
, не имеет значения.
Во-вторых, по традиции, если вы не укажете имя выходного файла с параметром -o
, программа и компоновщик компилятора создадут исполняемый файл с именем a.out
.
Но это еще не все, потому что со вторым примером вы фактически создаете реальный объектный файл, и они не исполняются. Как упомянуто выше, эти требования должны быть переданы на отдельный шаг привязки для создания исполняемого файла.
Вам необходимо либо создать исполняемый файл:
gcc test.c
./a.out
Или вы должны связать объектный файл в исполняемый файл:
gcc -c test.c # Create object file
gcc test.o -o test # Use object file to create executable file
./test # Run the executable file
Объектный файл не является машинным руководством. Он не предназначен для запуска. Он предназначен для связи. Вы должны использовать 'gcc test.c -o test'. Затем у вас есть исполняемый файл с именем 'test'. –
Взгляните на «man ld» и посмотрите, какую цель он выполняет при создании окончательного эльфа-исполняемого файла, и см. Ответы (а также удаленный файл Joachim) ниже. –
после 'gcc test.c -o test.o', вы создали исполняемый файл с именем' test.o'. Это не объектный файл. –