Програмування під linux

Всі дії в операційній системі виконуються за допомогою програм, тому багатьом новачкам цікаво не тільки використовувати чужі програми, а писати свої. Багато хто хоче внести свій вклад в кодову базу OpenSource.

Це оглядова стаття про програмування під Linux. Ми розглянемо які мови використовуються найчастіше, розглянемо основні поняття, а також можливості, розберемо як написати просту програму на одному з найпопулярніших мов програмування, як її вручну зібрати і запустити.

1. На що пишуть програми?

Історично склалося так, що ядро ​​Unix було написано на мові Сі. Навіть більше того, ця мова була створений для написання ядра Unix. Оскільки ядро ​​Linux було засновано на ядрі Minix (версії Unix), то воно теж було написано на Сі. Тому можна сказати, що основна мова програмування для Linux це Сі і С ++. Така тенденція зберігалася протягом довгого часу.

А взагалі, писати програми для Linux можна майже на будь-якій мові починаючи від Java і Python і закінчуючи С # і навіть Pascal. Для всіх мов є компілятори і інтерпретатори. Писати програми на С ++ складно, а Сі багатьма вже вважається застарілим, тому безліч програмістів використовують інші мови для написання програм. Наприклад, безліч системних інструментів написані на Python або Perl. Більшість програм від команди Linux Mint, установник Ubuntu і деякі скрипти apt написані на Python. Безліч скриптів, в тому числі прості скрипти оптимізації написані на Perl. Іноді для скриптів використовується Ruby. Це скрипти OpenShift або, наприклад, фреймворк Metasploit. Деякі розробники кроссплатформенних програм використовують Java. Але основні компоненти системи написані всі ж на Сі.

Ми не будемо розглядати основи Сі в цій статті. Сі - складна мова і вам знадобиться прочитати як мінімум одну книгу і багато практикуватися щоб його освоїти. Ми розглянемо як писати програми на Сі в Linux, як їх збирати і запускати.

Навіщо вчити Сі:

2. Бібліотеки

Природно, що якщо вам необхідно вивести рядок або зображення на екран, то ви не будете безпосередньо звертатися до відеокарти. Ви просто викличете кілька функцій, які вже реалізовані в системі і передасте їм дані, які потрібно вивести на екран. Такі функції розміщуються в бібліотеках. Фактично, бібліотеки - це набори функцій, які використовуються іншими програмами. У них знаходиться такий же код, як і в інших програмах, різниця лише в тому, там необов`язково присутність функції ініціалізації.

Бібліотеки діляться на два типи:

  • статичні - вони зв`язуються з програмою на етапі компіляції, вони зв`язуються і після цього всі функції бібліотеки доступні в програмі як рідні. Такі бібліотеки мають розширення .a;
  • динамічні - такі бібліотеки зустрічаються набагато частіше, вони завантажені в оперативну пам`ять, і зв`язуються з програмної динамічно. Коли програмі потрібна будь-яка бібліотека, вона просто викликає її за відомою адресою в оперативній пам`яті. Це дозволяє економити пам`ять. Розширення цих бібліотек - .so, яке походить від Shared Object.

Таким чином, для будь-якої програми на Сі потрібно підключати бібліотеки, і всі програми використовують будь-які бібліотеки. Також важливо помітити, якою мовою б ви не надумали писати, в кінцевому підсумку все буде зведено до системних бібліотек Сі. Наприклад, ви пишете програму на Python, використовуєте стандартні можливості цієї мови, а сам інтерпретатор вже є програмою на Сі / С ++, яка використовує системні бібліотеки для доступу до основних можливостей. Тому важливо розуміти як працюють програми на Сі. Звичайно, є мови, на зразок Go, які відразу переводяться на асемблер, але там використовуються принципи ті ж, що і тут. До того ж системне програмування linux, в основному, це Сі або С ++.

3. Процес складання програми

Перед тим як ми перейдемо до практики і створимо свою першу програму, потрібно розібрати як відбувається процес складання, з яких етапів він складається.




Кожна серйозна програма складається з безлічі файлів, це файли початкових кодів з розширенням .c і заголовні файли з розширенням .h. Такі заголовки містять функції, які імпортуються в програму з бібліотек або інших файлів. С. Перед тим. як компілятор зможе зібрати програму і підготувати її до роботи, йому потрібно перевірити чи дійсно всі функції реалізовані, чи доступні всі статичні бібліотеки та зібрати її в один файл. Тому, в першу чергу виконується препроцесор, який збирає вихідний файл, виконуються такі інструкції, як include для включення коду заголовних файлів.

На наступному етапі до роботи приступає компілятор, він виконує всі необхідні дії над кодом, розбирає синтаксичні конструкції мови, змінні і перетворює все це в проміжний код, а потім в код машинних команд, який ми можемо потім подивитися на мові асемблера. Програма на цьому етапі називається об`єктний модуль і вона ще не готова до виконання.

Далі до роботи приступає компоновщик. Його завдання зв`язати об`єктний модуль зі статичними бібліотеками та іншими об`єктними модулями. Для кожного вихідного файлу створюється окремий об`єктний модуль. Тільки тепер програма може бути запущена.

А тепер, давайте розглянемо весь єтот процес на практиці з використанням компілятора GCC.

4. Як зібрати програму

Для складання програм в Linux використовується два типи компіляторів, це Gcc і Clang. Поки що GCC більш поширений, тому розглядати ми будемо саме його. Зазвичай, програма вже встановлена ​​у вашій системі, якщо ж ні, ви можете виконати для установки в Ubuntu:

#include
#include


int main () {
printf ( "inuasparwil.ru n");
printf ( "Корінь:% f n", sqrt (9));
return 0;
}

Я спеціально додав функцію кореня щоб показати як працювати з бібліотеками. Спочатку потрібно зібрати об`єктний файл. Перейдіть в папку з вихідними кодами і виконайте:

$ Gcc -lm program.o -o program

Зверніть увагу на опцію -l, за допомогою неї ми вказуємо які бібліотеки потрібно підключити, наприклад, тут ми підключаємо бібліотеку математичних функцій, інакше компонувальник просто не знайде де є та чи інша функція. Тільки після цього можна запустити програму на виконання:

$ Ldd ./program

Це дві бібліотеки завантажувача, стандартна libc і libm, яку ми підключили.

5. Автоматизація складання

Коли ми розглядаємо програмування під Linux неможливо не відзначити систему автоматизації збірки програм. Справа в тому, що коли вихідних файлів програми багато, ви не будете вручну вводити команди для їх компіляції. Можна записати їх один раз, а потім використовувати скрізь. Для цього існує утиліта make і файли Makefile. Цей файл складається з цілей і має такий синтаксис:

мета: залежно
команда

Як залежності мети може бути файл або інша мета, основна мета - all, а команда виконує необхідні дії по збірці. Наприклад, для нашої програми Makefile може виглядати ось так:

$ make

Програма знову готова і ви можете її запустити.

висновки

Створення програм Linux дуже цікаво і захоплююче. Ви самі переконаєтеся в цьому, коли трохи звикнете до цій справі. Складно охопити все в такій невеликій статті, але ми розглянули самі основи і вони повинні дати вам базу. У цій статті ми розглянули основи програмування в linux, якщо у вас залишилися питання, питайте в коментарях!

Курс програмування на Сі під Linux:

Поділися в соціальних мережах:

Схожі
Практикум: модулі ядра linuxПрактикум: модулі ядра linux
Віртуальна флешка в linuxВіртуальна флешка в linux
Установка python 3 ubuntuУстановка python 3 ubuntu
Стів джобс свого часу пропонував роботу лінус торвальдсСтів джобс свого часу пропонував роботу лінус торвальдс
Нові мови програмування 2016Нові мови програмування 2016
Чим відрізняється unix від linuxЧим відрізняється unix від linux
Кращі книги про linuxКращі книги про linux
Типи файлів в linuxТипи файлів в linux
Келебії докса - введення в програмування на goКелебії докса - введення в програмування на go
Установка gcc в ubuntu 16.04Установка gcc в ubuntu 16.04
» » Програмування під linux