Чому краще компілювати, ніж встановлювати зі сховищ

У цьому маленькому посібнику я збираюся пояснити (і навчити вас), чому краще компілювати програму (скажімо Firefox, Vlc тощо) з її вихідного коду, ніж завантажувати її (із Центру програмного забезпечення, Yumex, Pacman тощо). ) та встановіть.

Спочатку ми йдемо з теорією:

Що таке "компіляція"?

Компіляція - це перетворення вихідного коду (коду, написаного певною мовою програмування, скажімо C, C ++ та ін.), У виконувану програму для його роботи за допомогою процесора для перетворення мови, що використовується для генерації коду, у двійковий та асемблер. Його також часто називають упаковкою.

Чому краще «компілювати»?

Спочатку ви повинні знати наступне, щоб зрозуміти, чому. Зазначено в «грубій» формі (просто, не надто професійно тощо), кожна раса (Pentium, Core, Atom тощо) та її різновиди (Intel, AMD, ARM тощо) процесора мають інструкції (програмне забезпечення написане на асемблері) що обробляє код) своєї моделі (Core i7, Core i5, Atom x2, Phantom x8, Arm тощо), а також мають загальні вказівки, які мають усі подібні.

Коли ви завантажуєте зі сховищ через Центр програмного забезпечення / apt-get / Yumex / Yum / Pacman / тощо, програма, яка встановлюється автоматично, називається такою: попередньо складений для роботи на всіх можливих процесорах (Intel і Amd). Оскільки це попередньо скомпільована програма, ті інструкції, характерні для конкретної моделі процесора, втрачаються (думайте, що якщо такі програми, як Firefox або Chrome, які мають більше 7 або 8 мільйонів рядків коду, вони повинні були ввести всі конкретні інструкції для кожного процесора на ринку, кількість коду була б настільки великою, що ця програма перестала б бути ефективною), не залишаючи нічого, крім загальних програм свого бренду-розробника (Intel, Amd, Arm).

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

Детальніше, ці конкретні інструкції тісно пов’язані з так званим чіпсетом вашої материнської плати, що є великим головним болем для тих з нас, хто має Intel, коли хочемо оновити процесор і материнську плату.

Ви були б здивовані силою, яка ваша amd atom x2 або ти Intel Core всередині, Основні 2 Duo, i3тощо зі старого ПК. Тепер ви розумієте, чому у світі Linux багато говорять про компіляцію відомого ядра (серця кожної операційної системи)? Уявіть, якщо ви скомпілюєте цілу систему (графічне середовище (Gnome, Kde тощо), ядро, загальновживані програми (Firefox, Vlc, Chrome, Wine тощо), спеціально для вашого ПК), всю швидкість та рівень оптимізації, які б ви мали.

Цей принцип компіляції для отримання коду, оптимізованого спеціально для вашої машини, - це той, який використовують дистрибутиви, такі як Gentoo та похідні (про що я зараз не буду говорити, я використовую Fedora minimal з компіляцією Gnome 3, ядра та інших програм) де система, ваші оновлення та ваші програми завжди компілюються.

Мінуси складання:

Я вже пояснив усі переваги, але, як і все у Всесвіті, він має одну проти.

У випадку компіляції вони є;

  • Для цього потрібен час (Firefox з i7 4790K (без розгону, оскільки я дуже поганий з напругою) займає 3 хвилини, Gnome Shell (панель нічого іншого) з Gnome-Control-Center зайняв у мене близько 2 хвилин, обидва складаються водночас у Fedora. Але на машині з менш потужним процесором цей час може бути непропорційно довгим).
  • Процесор використовує 100% своєї потужності з усіма його ядрами максимум, тому споживання та тепло набирають висоту (враховуйте це, якщо у вас розгін або це особливо ноутбук), тому зручно готувати партнера або кава з цього приводу.
  • Можливо, вам бракує бібліотеки (інструменту), яка використовує програму, щоб вона не помилилася при компіляції. Взагалі, всі дистрибутиви мають свої пакети або набори, щоб уникнути цього (вони постачаються з різними бібліотеками та іншими речами, які дозволяють ядру правильно взаємодіяти з процесором під час процесу).

Як я можу скомпілювати?

Для Debian (Ubuntu, Mint, Elementary тощо) всі вони є похідними від цього, тому дотримуйтесь цього

Тут я говорю про складання програми для звичайного використання, а не ядра.

aptitude встановити основні для побудови dh-make дескрипти fakeroot debhelper debian-policy ccache dh-autoreconf autotools-dev build-dep ardor

Я ставлю debian-policy, але якщо ваш дистрибутив не є Debian, і він видає вам помилку, що такий пакет не існує, просто ігноруйте його. Потрібно пояснити, що я давно не використовував ці системи, тому, якщо пакунок вже немає у сховищах, не хвилюйтеся.

Для Fedora:

sudo yum -y встановити заголовки ядра
ядро-розробник
sudo yum groupinstall "Засоби розробки"
sudo yum groupinstall "Бібліотеки розвитку"

Тут я повинен вибачитися за тих, хто використовує Arch (я погано знаю дистрибутив) і OpenSuse, оскільки я не знаю цих дистрибутивів або відповідних пакетів для правильної компіляції (і я не підтвердив те, що є в мережі, тому я не знаю, чи працюють вони на цих двох).

Тепер, коли у вас є всі необхідні вимоги, вам потрібно лише завантажити вихідний код програми, яку ви хочете скомпілювати, відповідно до розширення ви розпакуєте його за допомогою терміналу (не хвилюйтесь, я залишаю вам команди), і коли ви переходите до папки (завжди з терміналом), ви робите те саме наступне:

Якщо у вас є можливість налаштувати себе на вибір компонентів та інших:

./configure

Потім ви вводите:

make

І нарешті, щоб встановити програму на вашому Linux:

make install

Все це завжди з коренем (su у Fedora, sudo su в Ubuntu та його похідних (Mint, Elementary Os тощо)

Команди для розпакування за допомогою терміналу (файл розпаковується в папці, де знаходиться файл):

.Tar-файли (tar) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Пакування | tar cvf file.tar / file / * Розпакувати | tar xvf file.tar Переглянути вміст | tar tvf file.tar
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .tar.gz - .tar.z - .tgz (смола з gzip) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Пакування та застібка | tar czvf archive.tar.gz / archive / Розпакувати та розпакувати | tar xzvf file.tar.gz Переглянути вміст (не витягнуто) | смола tzvf file.tar.gz
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .gz (gzip) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Стиснути | gzip -q файл (файл стискає та перейменовує у "file.gz") Розпакуйте | gzip -d file.gz (Файл розпаковує його та залишає як "файл"). Примітка: gzip стискає лише файли, а не каталоги
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .bz2 (bzip2) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Стиснути | файл bzip2 | файл bunzip2 (файл стискає та перейменовує у "file.bz2") Розпакуйте | bzip2 -d файл.bz2 | bunzip2 file.bz2 (файл розпаковує його та залишає як "файл") Примітка: bzip2 стискає лише файли, а не каталоги
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .tar.bz2 (смола з bzip2) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Стиснути | tar -c файли | bzip2> file.tar.bz2 Розпакувати | bzip2 -dc файл.tar.bz2 | смола -xv | tar jvxf file.tar.bz2 (останні версії tar) Переглянути вміст | bzip2 -dc файл.tar.bz2 | смола -тв
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .zip (zip) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Стиснути | zip file.zip / mayo / archives Розпакувати | unzip file.zip Переглянути вміст | розпакуйте -v файл.zip
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .rar (rar) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Стиснути | rar -a file.rar / травень / архіви Розпакувати | rar -x file.rar Переглянути вміст | rar -v файл.rar | rar -l file.rar

І це все. Привіт з Буенос-Айреса, Аргентина. Зі святами та Новим роком! :).


Додати як пріоритетне джерело в Google