Допустим, ваша программа состоит из двух исходных файлов (main.c и Additional.c) и двух заголовочных файлов (Declarations.h и Additional.h).
Затем вы запускаете компилятор следующим образом:
$gcc main.c auxiliary.c -o myprogram
Вопрос 1 : Будет ли компилятор создавать один единственный объектный файл для моей программы (т. Е. Отсутствуют только библиотеки) или он создаст два объектных файла, по одному для каждого исходного файла (а затем скомпонует все вместе)
Вопрос 2 : есть ли необходимость вызывать компоновщик отдельно? Потому что, если вы используете команду выше, компилятор позаботится об этом за вас, верно?
Вопрос 3 : Почему некоторые библиотеки связываются автоматически (например, stdio) и почему некоторые требуют дополнительной работы (например, math.h требует добавления -lm при компиляции). Что означает -lm?
Вопрос 4 : Предположим, у вас есть один исходный файл, и ваша программа не нуждается во внешней библиотеке. Значит ли это, что объектный код, который вы получите от компилятора, уже будет исполняемым? (то есть, компилируя его как $ gcc -c main.c).