Упатство:Компајлирање на изворен код

Од Сподели wiki
Прејди на: содржини, барај

Еден од големите предизвици на Linux со кој новајлиите се соочуваат e компајлирањето на софтвер. Генерално, ако користите дистрибуција базирана на бинарни пакети би требало да одбегнувате рачно компајлирање на софтвер. Компајлирањето на софтвер има неколку негативности. Прво, софтверот не е управуван од пакет менаџерот и во најголем дел од случаите, непотребно. Освен тоа треба да побарате пакет за вашата дистрибуција. Меѓутоа доколку треба да компајлирате софтвер, на пример ја сакате најновата верзија од некоја програма за која нема бинарен пакет за вашата дистрибуција - ова е упатство кое ќе ви помогне тоа да го направите точно.

Состојки

За компајлирање на софтвер потребен е комапјлер. GCC е основниот компајлер кој го има во скоро секоја дистрибуција. Исто така ќе ви требаат autоtools алатките, и различни апликации како на пример flex/bison. Многу дистрибуции во основната инсталација ги содржат потребните алатки за компајлирање. Меѓутоа некои desktop фокусирани дистрибуции како на пример Ubuntu, овие алатки не ги содржат алатките со основната инсталација. Во Ubuntu не се инсталираат алатки за развивање со основната инсталација, но има специјален пакет наречен build-essential. Инсталирајте го на следниот начин.

# sudo apt-get install build-essential

Како се дистрибуира изворниот

За да компајлирате апликација, потебен ви е изворниот код. Изворниот код се претвора во бинарен код со помош на компајлер. Кога програмерот издава апликација во [[Изворен код|изворен код], обично таа се состои од серија датотеки и директориуми, сите спакувани заедно во архива која има најчесто има наставка tar.gz (tar датотека компресирана со gzip) или tar.bz2 (tar датотека компресирана со bzip2). Кога ќе спуштите некоја од овие датотеки треба да ги отпаковате сите датотеки и директориуми. Откако ќе го промените тековниот директориум во директориумот каде се наоѓа tarball датотеката, употребете ја следната команда:

# tar -zxpf appname.tar.gz

или следната команда за bzip2 архива:

# tar -jxpf appname.tar.bz2


Зависности

Често кога развивачите создаваат слободен софтвер/отворен код, тие внесуваат фунцкионалности од софтвер од други развивачи. На пример, видео апликација може да користи функционалности од ffmpeg пакетот. Според тоа апликацијата треба да има пристап до изворниот код на ffmpeg за да може да се компајлира. Често кога ќе преземeте пакет (tarball) од некоја веб страна, ќе биде наведено од што зависи пакетот. Но, најчесто, зависностите ќе ги откриете при компајлирање, и рачно ќе ги инсталирате. Во најголемиот дел од дистрибуциите кои се базирани на бинарни пакети, кога пакет со [[Изворен код|изворен код] зависи на друга апликација, треба да инсталирате два пакети - главниот и уште еден со исто име, само со суфикс -dev или -devel. Така, на пример ако апликацијата зависи од gstreamer, треба даинсталирате libgstreamer0.10-0 и lib-gstreamer0.10-dev. За зависностите ќе стани збор во следната секција.

За пример, ќе ја објаснам инсталацијата на basket од [[Изворен код|изворен код] чекор-по-чекор. Доколку пакетот е инсталиран во /tmp директориумот

# cd /tmp

потоа, го отпакуваме пакетот и го менуваме тековниот директориум со cd

# tar -zxpf basket-0.6.0.tar.gz
# cd basket-0.6.0/

Потоа сакаме да видиме дали има некои специфични опции за компајлирање за [Basket. Ова се опции кои можете да ги додадете на командите за компајлирање, а кои се опциони, но го прилагодуваат начинот на кој апликацијата се копајлира и инсталира. Затоа внесуваме:

# ./configure --help=short

Релевантните делови од излезот во делот Optional Features: и Optional Packages:.

  * Optional Features:
  	o --disable-mt link to non-threaded Qt (deprecated)
	o --disable-threading disables threading even if libpthread
	found
		o --disable-rpath do not use the rpath feature of ld
	o --disable-path-check dont't try to find out, where to install
	o --disable-largefile omit support for large files
   * Optional Packages
  	o --with-qt-includes=DIR where the Qt includes are.
	o --with-qt-libraries=DIR where the Qt library is installed.
	o --without-arts build without aRts default=no

Тука нема опции кои нас не интересираат. Некогаш има опции со кои се овозможуваат или не се овозможуваат одредени карактеристики од апликацијата. Ова можете да го направите со додавање на --disable-feature или --enable-feature како аргументи на configure скриптата. Во делот Optional Packgages: понекогаш секоја линија завршува со (обично: test) (иако тоа не е случај со basket). Ова значи дека конфигурационата скрипта ќе тестира со цел да провери дали ги имате тие пакети; ако ги нема, тогаш поддршката за тие пакети нема да биде вклучена. Друга важна конфигурациска опција е --prefix. Ова и кажува на апликацијата каде да ги инсталира сите нејзини делови. Нормално, компајлираниот софтвер се инсталира во директориумот /usr/local. Извршните датотеки одат во /usr/locаl/bin, библиотечните датотеки во /usr/local/lib итн. Користејќи ја опцијата --prefix можете да и кажете на конфигурационата скрипта да се инсталира на друго место. Ова е важно за kde базираните апликации кои терба да бидат инсталирани на истото место каде е инсталирн и останатиот дел од kde. За ubuntu, fedora и mandriva (и нивните деривати), треба да биде поставено --prefix=/usr. Каде е вашата kde инсталација, можете да проверите со echo $KDEDIR.

За да го инсталираме basket во /usr (каде Kubuntu ги става KDE и KDE асоцираните апликации), ја пишуваме следната команда:

# ./configure --prefix=/usr

Излезот треба да изгледа вака:

  * checking build system type... i686-pc-linux-gnu
  * checking host system type... i686-pc-linux-gnu
  * checking for a BSD-compatibile install... /usr/bin/install -c
  * checking whether build enviorement is sane... yes
  * checking for gawk... gawk

Грешки

Во некои случаи можат да се појават и грешки поради зависностит кои можат да бидат од безопасни предупредувања до грешки поради кои инсталацијата нема да продолжи, како на пример:

   * checking for pkg-config /usr/bin/pkg-config
   * Package gtk+-2.0 was not found in the pkg-config searchpath.
   * Perhaps you shoild add the directory containing 'gtk+-2.0.pc' to
   * the PKG_CONFIG_PATH eviorement variable
   * No package 'gtk+-2.0' found
   * *********** Cannot indetify gtk2 version ***************
   * configure: error: *** pkg-config installed incorrectly or gtk2-dev absent ! ***

Ова значи дека треба пакетот gtk+-2.0 да биде инсталиран. Често зависноста е библиотечна датотека. Во овој случај недостасува пакетот gtk2-dev. Пакетот кој всушност треба да биде инсталиран е bgtk2.0-dev:

# sudo apt-get install libgtk2.0-dev

Понекогаш овој процес треба да го повторите неколку пати со цел сите зависности да бидат разрешени и ./configure скриптата да функционира без грешки. Повеќе пати ./configure скриптата ќе се извршува без грешки.

Откако ги отстранивме сите грешки и ја извршивме ./configure скриптата без грешки, поминуваме на следниот чекор - make. Едноставно внесуваме:

# make

Излезот од оваа команде е голем, а може и долго да трае во зависност од апликацијата. Скоро без исклучоци, ако успешно сме ја извршиле ./configure, make командата би требало да се изврши без грешка.

Откако make ќе заврши, треба да се инсталираат различните датотеки кои ја сочинуваат апликацијата. Ова се прави со командата:

# sudo make install

Откако ќе ја внесете root лозинката, ќе добиете излез кој Ви кажува каде датотеките од апликацијата се инсталираат. Ако тоа помине без грешка (а би требало да биде така, ако се од погоре кажаното се извршило без грешка), тогаш би требало да можете да ја стартувате апликацијата. Во нашиот случај само напишете basket.