Waarom is het beter om te compileren dan om te installeren vanuit de repositories

In deze kleine gids ga ik uitleggen (en je leren) waarom het beter is dat je een programma compileert (bijvoorbeeld Firefox, Vlc, enz.) Vanuit de broncode, dan het downloadt (uit The Software Center, Yumex, Pacman, enz. ) en installeer.

Eerst gaan we met de theorie:

Wat is "compileren"?

Compileren is het transformeren van de broncode (code geschreven in een bepaalde programmeertaal, bijvoorbeeld C, C ++, etc.) naar een uitvoerbaar programma voor de werking ervan door het gebruik van de processor om de taal die wordt gebruikt om de code te genereren om te zetten in binaire en assembler. Het wordt ook vaak verpakking genoemd.

Waarom is het beter om te "compileren"?

U moet eerst het volgende weten om te begrijpen waarom. Op een «grove» manier gezegd (eenvoudig, niet erg professioneel, enz.), Hebben elk ras (Pentium, Core, Atom, enz.) En zijn soort (Intel, AMD, ARM, enz.) Processor instructies (software geschreven in assembler die de code verwerkt) van hun model (Core i7, Core i5, Atom x2, Phantom x8, Arm, etc.) en hebben ook algemene instructies die al hun soort hebben.

Wanneer u downloadt van de repositories via het Software Center / apt-get / Yumex / Yum / Pacman / etc, zegt een programma dat automatisch installeert dat dit voorgecompileerd voor werking op alle mogelijke processors (Intel en Amd). Omdat het een voorgecompileerd programma is, gaan die instructies die typerend zijn voor dat specifieke processormodel verloren (denk dat als een programma als Firefox of Chrome, die meer dan 7 of 8 miljoen regels code hebben, ze alle specifieke instructies voor elk processor op de markt, zou de hoeveelheid code zo groot zijn dat dat programma niet langer efficiënt zou zijn), waardoor er niets meer overblijft dan de algemene van het merk van de maker (Intel, Amd, Arm).

Wanneer u de broncode van een programma zelf downloadt, unzipt en compileert, wordt het gecompileerd met de specifieke instructies van TU bewerker, (wat niet betekent dat het niet zal werken op een machine met een andere, alleen dat het specifiek en puur voor uw processor geoptimaliseerd zal worden), waardoor al het vermogen wordt ontketend en vrijgegeven dat uw processor kan geven dankzij de specifieke instructies.

In meer technische details zijn deze specifieke instructies nauw verbonden met wat bekend staat als de chipset van je moederbord, wat de grote hoofdpijn is voor degenen onder ons die Intel hebben als we de processor en het moederbord willen upgraden.

Je zou versteld staan ​​van de kracht die je amd atoom x2 of jij Intel Core binnen, 2 Core Duo, i3, etc vanaf uw oude pc. Begrijp je nu waarom er in de Linux-wereld veel gepraat wordt over het compileren van de beroemde Kernel (het hart van elk besturingssysteem)? Stel je voor dat als je een heel systeem compileert (grafische omgeving (Gnome, Kde, etc), Kernel, veelgebruikte programma's (Firefox, Vlc, Chrome, Wine, etc.) speciaal voor je pc) alle snelheid en optimalisatieniveaus die je zou hebben.

Dit compilatieprincipe om een ​​code te verkrijgen die speciaal voor jouw machine is geoptimaliseerd, wordt gebruikt door distributies zoals Gentoo en afgeleiden (waar ik het nu niet over ga hebben, ik gebruik Fedora minimaal met compilatie van Gnome 3, de kernel en andere programma's) waar het systeem, uw updates en uw programma's altijd worden gecompileerd.

Nadelen van compilatie:

Ik heb alle voordelen al uitgelegd, maar zoals alles in het universum heeft het er een tegen.

In het verzamelgeval zijn ze;

  • De tijd die hiervoor nodig is (Firefox met een i7 4790K (zonder overklok aangezien ik erg slecht ben met voltages) duurt 3 minuten, Gnome Shell (de balk niets meer) met Gnome-Control-Center kostte me ongeveer 2 minuten, beide worden gecompileerd op dezelfde tijd in Fedora. Maar op een machine met een minder krachtige processor kan deze tijd onevenredig lang zijn).
  • De processor gebruikt 100% van zijn vermogen met al zijn kernen maximaal, dus het verbruik en de warmte schieten omhoog (houd hier rekening mee als je overklokt of als het vooral een notebook is), dus is het handig dat je een mate of een koffie zet voor de gelegenheid.
  • Misschien mist u een bibliotheek (tool) die een programma gebruikt, zodat deze geen fouten maakt bij de compilatie. Over het algemeen hebben alle distributies pakketten of sets daarvan om dit te vermijden (ze zitten vol met verschillende bibliotheken en andere dingen die de kernel in staat stellen om tijdens het proces naar behoren te communiceren met de processor).

Hoe kan ik compileren?

Voor Debian (Ubuntu, Mint, Elementary, enz. Zijn het allemaal afgeleiden hiervan, dus volg dit

Hier heb ik het over het compileren van een programma voor normaal gebruik, niet over een kernel.

aptitude install build-essential dh-make devscripts fakeroot debhelper debian-policy ccache dh-autoreconf autotools-dev build-dep ardor

Ik heb debian-policy geplaatst, maar als je distro geen Debian is en je een foutmelding krijgt dat zo'n pakket niet bestaat, negeer het dan gewoon. Ik moet duidelijk maken dat ik deze systemen lange tijd niet heb gebruikt, dus als een pakket niet meer in de repositories staat, maak dan geen probleem.

Voor Fedora:

sudo yum -y installeer kernel-headers
kernel-ontwikkeling
sudo yum groupinstall "Ontwikkelingstools"
sudo yum groupinstall "Development Libraries"

Hier moet ik mijn excuses aanbieden voor degenen die Arch gebruiken (ik ken de distro niet goed) en OpenSuse, aangezien ik deze distributies of de respectievelijke pakketten niet ken om een ​​correcte compilatie uit te voeren (en ik heb niet bevestigd wat er op het netwerk staat, zodat ik voor die twee niet weet of ze werken).

Nu je alle noodzakelijke vereisten hebt, hoef je alleen de broncode te downloaden van het programma dat je wilt compileren, afhankelijk van de extensie die je uitpakt met de terminal (maak je geen zorgen, ik laat je de commando's achter) en wanneer je naar de map gaat (altijd met de terminal) doe je hetzelfde:

Als u de mogelijkheid heeft om uzelf te configureren om de componenten en andere te kiezen:

./configure

Vervolgens typ je:

make

En tot slot om het programma op uw linux te installeren:

make install

Dit alles altijd met root (su in Fedora, sudo su in Ubuntu en zijn derivaten (Mint, Elementary Os, enz.)

Opdrachten om uit te pakken met behulp van de terminal (het bestand wordt uitgepakt in een map waarin het bestand zich bevindt):

.Tar-bestanden (tar) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Pack | tar cvf file.tar / file / * Uitpakken | tar xvf file.tar Bekijk inhoud | tar tvf-bestand.tar
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .tar.gz - .tar.z - .tgz (tar met gzip ) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Pak en ritssluiting | tar czvf file.tar.gz / file / Uitpakken en unzippen | tar xzvf file.tar.gz Bekijk inhoud (niet uitgepakt) | tar tzvf-bestand.tar.gz
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .gz (gzip) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Comprimeren | gzip -q bestand (Het bestand comprimeert en hernoemt het "file.gz") Unzip | gzip -d file.gz (Het bestand pakt het uit en laat het staan ​​als "bestand" Opmerking: gzip comprimeert alleen bestanden, geen mappen
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .bz2 (bzip2) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Comprimeren | bzip2-bestand | bunzip2-bestand (Het bestand comprimeert en hernoemt het "file.bz2") Unzip | bzip2 -d bestand.bz2 | bunzip2 file.bz2 (Het bestand pakt het uit en laat het als "bestand" staan) Opmerking: bzip2 comprimeert alleen bestanden, geen mappen
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .tar.bz2 (teer met bzip2) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Comprimeren | tar -c bestanden | bzip2> file.tar.bz2 Unzip | bzip2 -dc bestand.tar.bz2 | teer -xv | tar jvxf file.tar.bz2 (recente versies van tar) Bekijk inhoud | bzip2 -dc bestand.tar.bz2 | tar -tv
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .zip (zip) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Comprimeren | zip file.zip / mayo / archieven Unzip | unzip file.zip Bekijk inhoud | unzip -v file.zip
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .rar (rar) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Comprimeren | rar -a file.rar / mei / archieven Unzip | rar -x file.rar Bekijk inhoud | rar -v bestand.rar | rar -l bestand.rar

En dat is alles. Groeten uit Buenos Aires, Argentinië. Fijne feestdagen en nieuwjaar! :).


Voeg dit toe als voorkeursbron in Google.