компоновщик
$ cc main.c # создаст исполняемый файл main.out
$ cc -v main.c # тоже, но с выводом информации
$ gcc -E main.c # остановиться после препроцессора
$ gcc -S main.c # остановиться после ассемблера на втором этапе (main.s)
$ gcc -c main.c # остановиться после ассемблирования перед компановкой, получится объектный модуль
$ objdump -x main.o # вывести объектный файл в читаемом виде
$ nm mian.o # менеджер имен
$ gcc -o main main.c # получить исполняемый файл с именем main
Создадим файл func.c
#include <stdio.h>
int my_func()
{
printf("My function\r\n");
}
И в main.c добавим вызов функции my_func()
$ gcc -o main main.c func.c # соберет исполняемый файл main
Но правильно будет модули компилировать отдельно и собрать из полученных объектный файлов
$ gcc -c main.c
$ gcc -c func.c
$ gcc -o main main.o func.o
$ ldd main # выведет используемые библиотеки
make: main.o func.o
Если добавить m.cpp
make: main.o func.o
То при вызове команды make
утилита сама определит язык и нужную команду компилятор.
$ ps -a # выведет список процессов найти PID программы
$ cd /proc/<PID>
$ cat maps # выведет адреса сегментов процесса