Rozdział 25 Łączenie z innymi językami Programista, pisząc jakiś program ma problem z wyborem najbardziej odpowiedniego ję- zyka do utworzenia tego programu. Niekiedy zdarza się, że najlepiej byłoby pisać program, korzystając z różnych języków. Język C może być z łatwością łączony z innymi językami programowania, które podlegają kompilacji bezpośrednio do kodu maszynowego (Asembler, Fortran czy też C++). Ponadto dzięki specjalnym bibliotekom można go łączyć z językami bardzo wysokiego poziomu (takimi jak np. Python czy też Ruby). Ten rozdział ma za za- danie wytłumaczyć Ci, w jaki sposób można mieszać różne języki programowania w jednym programie. Język C i Asembler Informacje zawarte w tym rozdziale odnoszą się do komputerów z procesorem i386 i po- krewnych. Łączenie języka C i języka asemblera jest dość powszechnym zjawiskiem. Dzięki możliwo- ści połączenia obu tych języków programowania można było utworzyć bibliotekę dla języka C, która niskopoziomowo komunikuje się z jądrem systemu operacyjnego komputera. Ponieważ zarówno asembler jak i C są językami tłumaczonymi do poziomu kodu maszynowego, za ich łączenie odpowiada program zwany linkerem (popularny ld). Ponadto niektórzy producenci kompilatorów umożliwiają stosowanie tzw. wstawek asemblerowych , które umieszcza się bezpośrednio w kodzie programu, napisanego w języku C. Kompilator, kompilując taki kod wstawi w miejsce tychże wstawek odpowiedni kod maszynowy, który jest efektem przetłuma- czenia kodu asemblera, zawartego w takiej wstawce. Opiszę tu oba sposoby łączenia obydwu języków. Łączenie na poziomie kodu maszynowego W naszym przykładzie założymy, że w pliku f1.S zawarty będzie kod, napisany w asem- blerze, a f2.c to kod z programem w języku C. Program w języku C będzie wykorzystywał jedną funkcję, napisaną w języku asemblera, która wyświetli prosty napis “Hello world”. Z powodu ograniczeń technicznych zakładamy, że program uruchomiony zostanie w środowisku POSIX na platformie i386 i skompilowany kompilatorem gcc. Używaną składnią asemblera będzie AT&T (domyślna dla asemblera GNU) Oto plik f1.S: .text .globl _f1 177
... zobacz całą notatkę
Komentarze użytkowników (0)