Опция -c
указывает компилятору просто скомпилировать исходный файл в «объектный файл», а не связывать его.
Без шага связывания объектный файл, который вы получаете, не является исполняемым,но только промежуточный шаг.Вероятно, вы захотите сделать
g++ -o main.x -Wall -pedantic -Wno-long-long -Werror main.cpp
. Это сгенерирует исполняемый файл main.x
(я обычно использую .x
для исполняемых файлов и .o
для объектных файлов);обратите внимание, что это будет chmod
правильно для выполнения.(совет: другой полезный параметр в стиле lint - -Wextra
; в оптимизированных сборках вы также должны учитывать -O3
)
Промежуточный шаг часто выполняется, когда у вас есть несколько файлов для компиляции, а затем связать их вместе;хотя вы можете просто передать все источники в качестве аргументов компилятору и позволить ему выполнить всю работу, это означает, что при каждой перекомпиляции вы перекомпилируете все исходные файлы, и если у вас начинаются большие проектыэто может быть проблемой с точки зрения потерянного времени (просто чтобы дать вам идею: создание OpenOffice.org с нуля может занять более 4 часов).
Вместо этого в этих ситуациях вы просто перекомпилируете объектные файлыизмененные файлы, и связывайте все вместе, передавая имена объектных файлов g++
(или ld
, если вы чувствуете себя достаточно смелыми, чтобы возиться с опциями компоновщика).Обычно эта операция автоматизируется с помощью Makefiles или других систем сборки.