Kompilacja ze źródeł
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.