Kompilacja ze źródeł

Z openSUSE wiki

Przed przystąpieniem do kompilacji oprogramowania ze źródeł polecam lekturę wątku http://forum.suse.pl/index.php/topic,10366.0.html

Spis treści

Kompilacją zostanie przedstawiona na przykładzie GNU Gadu - multikomuniakatora, obsługującego między innymi sieć Gadu-Gadu.

Przygotowanie systemu

Rozpakowanie archiwum z kodem źródłowym

Najpierw należy rozpakować skompresowane archiwum z kodem źródłowym programu. Można to zrobić za pomocą programu Ark (domyślny w KDE) lub File Roller (domyślny w GNOME), ale lepiej to zrobić w konsoli - konsole w KDE lub gnome-terminal w GNOME.

Jeśli archiwum ma końcówkę "tar.gz", to można je tak rozpakować:

tar -zxvf gg2-2.2.9.tar.gz

A z końcówką "tar.bz2":

tar -jxvf gg2-2.2.9.tar.bz2

Później trzeba przejść do przed chwilą utworzonego katalogu:

cd gg2-2.2.9

Czytanie dokumentacji

Jeszcze wystarczy przeczytać dokumentację (po angielsku) - tekst w poleceniu less przewija sie strzałkami, a wychodzi klawiszem q:

cat README | less
cat INSTALL | less

Czasami są tam wypisane wszystkie pakiety, które są potrzebne do skompilowania programu. Jeśli ich nie masz, to zainstaluj je (i odpowiednie pakiety z nazwą kończącą się na -devel) teraz korzystając z jakiegoś menedżera pakietów.

Skrypt configure

Dostosowywanie opcji kompilacji

No to teraz zobacz co można wyłączyć/włączyć przy kompilowaniu danego programu:

./configure --help | less

Oto kawałek tekstu wyświetlonego przez powyższą komendę:

Installation directories:
  --prefix=PREFIX         install architecture-independent files in PREFIX
                          [/usr/local]
  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
                          [PREFIX]

By default, `make install' will install all the files in
`/usr/local/bin', `/usr/local/lib' etc.  You can specify
an installation prefix other than `/usr/local' using `--prefix',
for instance `--prefix=$HOME'.

For better control, use the options below.

Fine tuning of the installation directories:
  --bindir=DIR           user executables [EPREFIX/bin]
  --sbindir=DIR          system admin executables [EPREFIX/sbin]
  --libexecdir=DIR       program executables [EPREFIX/libexec]
  --datadir=DIR          read-only architecture-independent data [PREFIX/share]
  --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
  --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
  --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
  --libdir=DIR           object code libraries [EPREFIX/lib]
  --includedir=DIR       C header files [PREFIX/include]
  --oldincludedir=DIR    C header files for non-gcc [/usr/include]
  --infodir=DIR          info documentation [PREFIX/info]
  --mandir=DIR           man documentation [PREFIX/man]

ciach - za dużo tego

Optional Features:
  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
  --disable-dependency-tracking  speeds up one-time build
  --enable-dependency-tracking   do not reject slow dependency extractors
  --enable-static[=PKGS]
                          build static libraries [default=no]
  --enable-shared[=PKGS]
                          build shared libraries [default=yes]
  --enable-fast-install[=PKGS]
                          optimize for fast installation [default=yes]
  --disable-libtool-lock  avoid locking (might break parallel builds)
  --enable-maintainer-mode  enable make rules and dependencies not useful
                          (and sometimes confusing) to the casual installer
  --disable-nls           do not use Native Language Support
  --disable-rpath         do not hardcode runtime library paths
  --enable-debug          debug mode                    default=disabled
  --enable-gdb            gdb support                   default=disabled
  --disable-esdtest       Do not try to compile and run a test ESD program

Optional Packages:
  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
  --with-pic              try to use only PIC/non-PIC objects [default=use
                          both]
  --with-tags[=TAGS]
                          include additional configurations [automatic]
  --with-c99-vsnprintf    Target system has C99-compatible vsnprintf()
  --with-gnu-ld           assume the C compiler uses GNU ld default=no
  --with-libiconv-prefix[=DIR]  search for libiconv in DIR/include and DIR/lib
  --without-libiconv-prefix     don't search for libiconv in includedir and libdir
  --with-included-gettext use the GNU gettext library included here
  --with-libintl-prefix[=DIR]  search for libintl in DIR/include and DIR/lib
  --without-libintl-prefix     don't search for libintl in includedir and libdir
  --with-all-plugins      Build all plugins with all features
  --with-perl             perl support - experimental code
  --without-gghist                Build without gghist
  --without-gui           Build without gtk2 GUI plugin
  --with-x                use the X Window System
  --without-gtkspell      Build without GUI plugin with gtkspell support
  --without-gadu                  Build without gadu-gadu plugin
  --with-external-libgadu       Build without gadu-gadu plugin with external libgadu
  --with-gnutls Build with gnutls               default=yes
  --without-tlen                  Build without tlen plugin
  --without-jabber                Build without jabber plugin
  --without-xosd                  Build without XOSD plugin
  --without-sms           Build without sms plugin
  --without-aaway                 Build without auto away plugin
  --with-ignore           Build without ignore plugin
  --with-dbus             Build with DBUS plugin
  --with-dbus-dir=DIR   Prefix where D-BUS services are installed (/usr/share/dbus-1/services)
  --without-docklet-system-tray   Build without docklet plugin
  --without-docklet-dockapp       Build without dockapp plugin
  --without-esd           Build without esd sound plugin
  --with-esd-prefix=PFX   Prefix where ESD is installed (optional)
  --with-esd-exec-prefix=PFX Exec prefix where ESD is installed (optional)
  --without-arts                  Build without aRts! sound plugin
  --without-oss           Build without OSS sound plugin
  --without-external      Build without external player sound plugin
  --without-history-external-viewer       Build without external history plugin
  --without-update                Build without update plugin

O, dużo tego - dla przykładu zostaną ustawione takie opcje:

./configure --prefix=/usr --without-oss --without-arts

Za pomocą --prefix=katalog ustala się katalog, w którym program będzie zainstalowany. OSS jest przestarzały, a aRts przydatny tylko dla użytkowników KDE.

Czy wszystko się udało?

Teraz wystarczy sprawdzić, czy skrypt configure wykonał się bez błędów:

echo $?

Jeśli wynikiem jest liczba 0, możesz przejść do następnego podpunktu. Jeśli nie - trzeba zobaczyć co spowodowało błąd i spróbować to naprawić. Ale jak to zrobić? To proste - wystarczy, ze przejrzysz ostatnie linijki wyświetlone przez ./configure. Na przykład:

configure: error: No package 'loudmouth-1.0' found

Czyli brakuje pakietu 'loudmouth', który jest wymagany przez GNU Gadu. Teraz należy go znaleźć za pomocą ulubionego menedżera pakietów RPM, i zainstalować - i pakiet z taką sama nazwą, i z "-devel" (który jest potrzebny do kompilacji) przy nazwie.

Jeszcze jeden przypadek dość często powtarzający się na forum:

checking for c++... no
checking for g++... no
checking for gcc... no
checking for CC... no
checking for cxx... no
checking for cc++... no
checking for cl... no
checking whether the C++ compiler (gcc  ) works... no
configure: error: installation or configuration problem: C++ compiler cannot create executables.

W tym wypaku brakuje pakietu z kompilatorem języka C++.

I tak w kółko, aż do momentu w którym polecenie echo $? zwróci 0.

Właściwa kompilacja

Teraz czas na właściwą kompilację - proces, który może nieźle "przyciąć" komputer. I co gorsza, praca w tym czasie może znacznie wydłużyć czas kompilacji...

Żeby zacząć ten proces, zwykle wystarczy:

make

Czasami jednak zamiast make, programiści użyli narzędzi takich jak jam - zwykle wszystko jest opisane w pliku INSTALL lub README.

Czy make już skończyło? Jak tak, to sprawdź, czy się udało - znanym poleceniem echo $?.

Instalacja w drzewie katalogów

Jeśli jednak wszystko się udało, to możesz przejść do następnego kroku - instalacji skompilowanego programu. Wystarczy, że wpiszesz:

make install

Mając uprawnienia administratora (jeśli program jest instalowany gdzieś indziej, niż w Twoim katalogu domowym).


Co zrobić, jak coś się nie udało ?

Przejrzyj ostatnie linijki, a jak nic nie możesz znaleźć - poszukaj rozwiązania problemu w wyszukiwarkach (google, na forum) - a jak nie znajdziesz rozwiązania tego problemu, to załóż wątek na forum z opisem problemu, wersją Twojego SUSE, informację co próbowałeś zrobić oraz ostatnimi linijkami komendy, która zakończyła swoje działanie błędem.

Zobacz też