From ab5fc26ede4c28369a0860c7c3c08376a212549d Mon Sep 17 00:00:00 2001 From: xf0r3m Date: Mon, 29 Apr 2024 13:57:08 +0200 Subject: [PATCH] =?utf8?q?Zako=C5=84czono=20redagowanie=2014=20rozdzia?= =?utf8?q?=C5=82u.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- articles/terminallog/Linux.Podstawy.html | 73 +++++++++++++----------- 1 file changed, 39 insertions(+), 34 deletions(-) diff --git a/articles/terminallog/Linux.Podstawy.html b/articles/terminallog/Linux.Podstawy.html index 318e432..c5a02f4 100644 --- a/articles/terminallog/Linux.Podstawy.html +++ b/articles/terminallog/Linux.Podstawy.html @@ -11326,8 +11326,8 @@ error_name=org.xfce.Xfconf.Error.PropertyNotFound reply_serial=25087 tekstu).

- W uproszeczniu zamiana kodu źródłowego na postać wykonywalną przez - komputer nosi nazwę kompilacji. Jednaj jak się za + W uproszczniu zamiana kodu źródłowego na postać wykonywalną przez + komputer nosi nazwę kompilacji. Jednak jak się za chwilę okaże jest tylko połowa sukcesu (w większości przypadków). Obecnie w dystrybucjach Linuksa dostępne są dwa kompilatory GNU C Compiler (gcc) oraz Clang/LLVM. W tym @@ -11353,7 +11353,7 @@ int main() { }

- Zapisany powyżej bardzo prosty program, zapisałem z w pliku + Zapisany powyżej bardzo prosty program, zapisałem w pliku hello.c. Pliki kodu źródłowego języka C powinny mieć rozszerzenie .c. Chociaż wiemy, że w przypadku Uniksów nie to znaczenia, to dla utrzymania porządku w plikach, warto je pokrótce @@ -11373,7 +11373,7 @@ xf0r3m@vm-cac72df:~/C$ cc hello.c działania na standardowym wyjściu. Wynikiem jego pracy jest pojawienie się tuż obok pliku a.out, który ma odpowiednii rodzaj uprawnień, aby móc go odrazu uruchomić - jest to plik - wykonywalny efekt - działania kompilatora na powierzonym mu kodzie. + wykonywalny, efekt działania kompilatora na powierzonym mu kodzie. Przekonać się możemy o tym wydając poniższe polecenie:

@@ -11398,17 +11398,17 @@ Hello, World!
           W przypadku pojednyczych programów takie działanie może wystarczyć,
           jednak rzadko się zdarza, aby programy były pojedynczymi plikami
           kodu źródłowego, zazwyczaj zawierają go znacznie, znacznie więcej.
-          Sama praca z pojedyncz plikiem, może być niepożądana przez
+          Sama praca z pojedynczym plikiem, może być niepożądana przez
           programistów jak i kompilatory mogą mieć problem z ich
           przetworzeniem.
         

Główne składowe programów są najczęściej grupowane a w pojedynczych - plikach umieszcza się ich poszczególne elementy. Kompilator również + plikach umieszcza się ich poszczególne elementy. Kompilacja również wygląda nieco inaczej. Wymagane jest użycie opcji -c w celu utworzenia dla każdego ze składowych plików obiektowych - zawierających kod obiektowy, - który finalnie przyjmie formę pliku wykonywalnego. Załóżmy, że mam + który finalnie przyjmie formę pliku wykonywalnego. Załóżmy, że mamy tylko dwa pliki.

@@ -11483,7 +11483,8 @@ Hello, World! zapomnimy wspomnieć o bibliotece konsolidatorowi to zostaniem nam zwrócony błąd. Chociaż błedy związane z niewłaściwym odwołaniem się do biblioteki, może nie wynikać z naszych ustawień konsolidatora. - Może to również być wynikiem braku zainstalownych w systemie. + Może to również być wynikiem braku zainstalownych bibliotek w + systemie.

Do wskazania bibliotek służy opcja -l kompilatora, @@ -11492,7 +11493,7 @@ Hello, World! dystrybucji jest to ten sam katalog - kiedy program typu init to systemd), wystarczy podać jej nazwę. W przeciwnym razie musimy na początku wskazać ścieżkę, na której można znaleźć tą - bibliotekę - za pomocą opcji -L a następnie podać jej nazwę + bibliotekę - za pomocą opcji -L, a następnie podać jej nazwę za pomocą wspomanianej już wcześniej opcji -l.

@@ -11522,12 +11523,13 @@ $ cc -o badobject badobject.o -lcurses -L/usr/junk/lib -lcrud Jak wiemy konsolidator zawsze dodaje do programów standardową bibliotekę języka C - libc.a. Ten plik jest biblioteką statyczną. Oznacza to, że konsolidator - podczas tworzenia właściwego pliku wykonywalne będzie kopiować do + podczas tworzenia właściwego pliku wykonywalnego będzie kopiować do naszego pliku fragmenty kodu maszynowego z biblioteki, wówczas plik biblioteki nie będzie nam potrzeby do uruchomienia.

- Tego typu ma dwie dość znaczące wady. Pierwszą z nich są rozmiary + Tego typu rozwiązanie ma dwie dość znaczące wady. Pierwszą z nich są + rozmiary bibliotek statycznych, a co za tym idzie rozmiary naszych programów oraz zajętosć pamięci operacyjnej podczas ich pracy. Drugą wadą, ale i nie kiedy zaletą, jest fakt przechowywanie kopii kodu biblioteki @@ -11544,8 +11546,8 @@ $ cc -o badobject badobject.o -lcurses -L/usr/junk/lib -lcrud biblioteki współdzielone. Podczas konsolidacji z wykorzystaniem bibliotek współdzielonych, nie są kopiowane całe fragmenty kodu, a tylko odwołania do nazw w bibliotece. W tym - przypadku biblioteka jest ładowana do pamięci w momencie gdy są - potrzebne. Dodatkową zaletą tego rozwiązania jest fakt, że procesy + przypadku biblioteka jest ładowana do pamięci w momencie gdy jest + potrzebna. Dodatkową zaletą tego rozwiązania jest fakt, że procesy mogą współdzielić ze sobą obszar pamięci, w którym znajdują się biblioteki, aby nie ładować ich za każdym razem, gdy uruchamiamy jakiś program. @@ -11577,7 +11579,7 @@ $ cc -o badobject badobject.o -lcurses -L/usr/junk/lib -lcrud

  • W jaki sposób należy dokonać konsolidacji z bibliotekami współdzielonymi?
  • Jakie mogą wyniknąć problemy podczas używania tych bibliotek i - jak ich ominąć?
  • + jak ich uniknąć?

    Wypisywanie zależności od bibliotek współużytkowanych

    @@ -11683,9 +11685,9 @@ ldconfig: Ścieżka `/usr/lib' podana więcej niż raz bardziej szczegółowych komunikatów.

    - Program ld.so może wykorzystać wykorzystać jescze jedno + Program ld.so może wykorzystać jeszcze jedno miejsce w celu znalezienia informacji na temat gdzie mogą znajdować - się biblioteki - zmienne LD_LIBRARY_PATH. Nie + się biblioteki - zmienną LD_LIBRARY_PATH. Nie we wszystkich systemach jest ona zdefiniowana i może zostać wykorzystana do wskazania niestandardowych bibliotek tuż przed uruchomieniem programu. @@ -11706,7 +11708,7 @@ ldconfig: Ścieżka `/usr/lib' podana więcej niż raz wcześniej - w przypadku bibliotek statycznych). Tutaj niezbędne będzie również wskazanie katalogu w celu dodania go do ścieżki wyszukiwania bibliotek. W tego typu przypadkach nie należy posługiwać - się ustawieniemi konsolidatora dynamicznego. + się ustawieniami konsolidatora dynamicznego.

    Opcja, o której mowa to: -Wl,-rpath. @@ -11734,7 +11736,7 @@ xf0r3m@laptop-5cfe659:~$ cc -o myprog myprog.o -Wl,rpath=/opt/pt/lib -L/opt/pt/l LD_LIBRARY_PATH. Zawartość tej zmiennej jest odczytywana przez konsolidator, który następnie przeszukuje podane ścieżki pod kątem występowania bibliotek. Ta - zmianna ma pierwszeństwo przez pozostałymi lokalizacjami, w których + zmiana ma pierwszeństwo przez pozostałymi lokalizacjami, w których mogą wystąpić biblioteki w systemie. Dlatego też ustawienie jej globalnie gdzieś w systemie (np. w plikach konfiguracyjnych powłoki) może spowodować znaczy spadek wydajności systemu. Jeśli już musimy @@ -11859,11 +11861,11 @@ xf0r3m@laptop-5cfe659:~$ cc -c -I/opt/pt/include netstats.c była szybka i przyjmna. Jednak w 99% przypadków z jakim możemy spotkać się raczej tak nie będzie folder będą zawierać podkatalogi a w nich sterty plików ręczna kompilacja, przy nie których - mogła by zająć tygodnie jak nie lata. Dlatego też powstało narzędze + mogła by zająć tygodnie jak nie lata. Dlatego też powstało narzędzie typu make. Narzędzie make ma za zadanie zarządzać procesem kompilacji. Mimo, że jest to potężny program to jest on dość prosty w działaniu. Jeśli gdzieś w paczkach z kodem - znajdziemy plik makefile lub Makefile ozanacza to + znajdziemy plik makefile lub Makefile oznacza to możemy użyć programu make do kompilacji projektu.

    @@ -11875,7 +11877,7 @@ xf0r3m@laptop-5cfe659:~$ cc -c -I/opt/pt/include netstats.c zależnościami.

    - W czasie wykonywania celów, narzędzię postępuje zgodnie z + W czasie wykonywania celów, narzędzie postępuje zgodnie z regułą (ang. rule), która może np. określać sposób w jaki kod źródłowy ma zostać zmieniony na plik obiektowy. Sam make posiada już zdefiniowane reguły, ale możemy je @@ -11915,8 +11917,8 @@ myprog: $(OBJS) myprog: widzimy już jakieś konkrety: pierwszym jest odwołanie się do makra, jest ono rozwiązywane do nazw zapisanych na początku pliku Makefile, w pliku nie - znajduje się żadne inne elementy systemu Make tak więc - ten cel jest o tych plików uzależniony. Warto dodać, że + znajduje się żadne inne elementy systemu Make o tej nazwie + tak więc ten cel jest od tych plików uzależniony. Warto dodać, że Make zakłada, że plki źródłowe znajdują się w tym samym katalogu co pliki Makefile. Uruchomienie polecenia make w tym katalogu prezentuje się następująco. @@ -11948,7 +11950,7 @@ cc -o myprog aux.o main.o Każde polecenie w pliku Makefile musi zostać wprowadzone w nowej linii i poprzedzone znakiem tabulacji równym czterem znakom spacji. - Makro $(CC) jest zmienną, która + Makro $(CC) przechowywuje nazwę programu kompilatora C, w wiekszości przypadku jej wartość będzie ustawiona na cc.

    @@ -11980,7 +11982,8 @@ xf0r3m@laptop-7bf2993:~/prog/C$ make make: Nie ma nic do zrobienia w 'all'.

    - Natomiast jeśli chociażby zmienimy datę, któregoś z plików kodu + Natomiast jeśli chociażby zmienimy czas modyfikacji, któregoś z + plików kodu źródłowego za pomocą prostego polecenia touch. Wówczas plik obiektowy będzie starszy niż plik źródłowy i Make dokona budowy naszego programu ponownie. @@ -12000,7 +12003,7 @@ cc -o myprog aux.o main.o

    Uzupełniając wywołanie programu make o różne opcje oraz argumenty możemy zmusić go do wykonani kilku przydatnych czynności. - Najprostrzym przykładem może być zmiana wartości makra CC, + Najprostszym przykładem może być zmiana wartości makra CC, wskazując inny niż domyślny kompilator.

    @@ -12021,7 +12024,7 @@ cc  foo.o   -o foo
             

    Tego typu uruchmianie narzędzia make bedzie sprawdzać się w przypadku programów zapisanych w jednym pliku lub programów, w - których jezykiem nie jest C. Jest to drobre rozwiązanie gdy dopiero + których jezykiem nie jest C. Jest to dobre rozwiązanie gdy dopiero rozpoczynamy pracę z danym językiem i nie wiem jeszcze jak działa kompilator czy inne narzędzia z nim związane. Jeśli nawet zbudowanie celu się niepowiedzie to i tak otrzymamy informację zwrotną co jest @@ -12054,7 +12057,7 @@ cc foo.o -o foo

    14.2.6. Organizowanie pliku Makefile

    @@ -12151,7 +12155,7 @@ PROGS=boring trite

    W pozostałej częsci plików występują już cele, które składają główne - pliki wykonywalne. Jeśli trzeb przygować regułę dla pliku obiektowego + pliki wykonywalne. Jeśli trzeba przygować regułę dla pliku obiektowego należy ją umieścić zaraz nad regułą programu pliku wykonywalnego. Jeśli z tego pliku obiektowego korzysta więcej plików wykonywalnych niż ten jednen to trzeba je przenieść nad nie wszystkie. @@ -12184,7 +12188,7 @@ PROGS=boring trite programowania, zmieniło się to wraz z rozpowszechnieniem się takich języków jak Perl a w poźniejszych latach Python. Niektóre z narzędzi systemowych zostały - przepisane z klasycznego C do np. Pytona - na przykład narzędziem + przepisane z klasycznego C do np. Pythona - na przykład narzędziem whois. Języki skryptowe obecnie przechylają szalę na swoją korzyść względem języków kompilowanych, mimo to zalety takich języków jak C oraz wpisanie się tego języka w rdzeń nauk komputerowych @@ -12237,7 +12241,7 @@ PROGS=boring trite Uniksowych. Język ten ma ogromne możliwości porównywalne z Pythonem, jednak nie jest on taki prosty w użyciu. Jego głównym zadaniem jest obróbka tekstu. Obecnie wiele narzędzi wykorzystuje jego możliwości - np. znany wszyskim system kontroli wersji - Git. + np. znany wszystkim system kontroli wersji - Git.

  • PHP - jest językiem służacym do dynamicznego tworzenie treści na stronach internetowych. Można wykorzystać go do generowania stron hipertekstowych oraz do modyfikacji @@ -12246,7 +12250,8 @@ PROGS=boring trite

    Innym wartym wspomnienia językiem jest m4 odpowiedzialny z przetwarzanie makr. Dostępny jest on w systemie - GNU autotools. + GNU autotools. Bierze udział w automatycznym generowaniu + pliku Makefile (Wiecej w 15 rozdziale).

    14.5. Język Java

    -- 2.39.5