Tworzenie oprogramowania



Podobne dokumenty
Tworzenie oprogramowania

Automatyzacja kompilacji. Automatyzacja kompilacji 1/28

Programowanie Proceduralne

Konsolidacja (linking)

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

Laboratorium 2: Biblioteki statyczne i dynamiczne w języku C. mgr inż. Arkadiusz Chrobot

Wstęp do Informatyki i Programowania Laboratorium: Lista 0 Środowisko programowania

Automatyzacja kompilacji. Automatyzacja kompilacji 1/40

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Systemy Operacyjne. Ćwiczenia

Make jest programem komputerowym automatyzującym proces kompilacji programów, na które składa się wiele zależnych od siebie plików.

Programowanie w C++ Wykład 1. Katarzyna Grzelak. 26 luty K.Grzelak (Wykład 1) Programowanie w C++ 1 / 28

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 3. Karol Tarnowski A-1 p.

Wydział Elektrotechniki, Informatyki i Telekomunikacji. Instytut Informatyki i Elektroniki. Instrukcja do zajęć laboratoryjnych

Kompilacja i scalanie programów w linii poleceń gcc i make

Java jako język programowania

Programy użytkowe (utilities)

Programowanie w C++ Wykład 1. Katarzyna Grzelak. 25 luty K.Grzelak (Wykład 1) Programowanie w C++ 1 / 38

Podstawy programowania. Wykład 9 Preprocesor i modularna struktura programów. Krzysztof Banaś Podstawy programowania 1

Sposoby wykrywania i usuwania błędów. Tomasz Borzyszkowski

Podstawy Programowania.

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Programowanie I. O czym będziemy mówili. Plan wykładu nieco dokładniej. Plan wykładu z lotu ptaka. Podstawy programowania w językach. Uwaga!

Co nie powinno być umieszczane w plikach nagłówkowych:

Fragment wykładu z języka C ( )

Wykład. Materiały bazują częściowo na slajdach Marata Dukhana

Wprowadzenie do biblioteki klas C++

Wstęp do programowania

Ćwiczenie nr 6. Poprawne deklaracje takich zmiennych tekstowych mogą wyglądać tak:

Zajęcia nr 1 Podstawy programowania. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Tworzenie oprogramowania

Cwiczenie nr 1 Pierwszy program w języku C na mikrokontroler AVR

Podstawy Programowania

Podstawy informatyki

WPROWADZENIE DO INFORMATYKI

SYSTEMY OPERACYJNE I laboratorium 3 (Informatyka stacjonarne 2 rok, semestr zimowy)

Programowanie w systemie Linux. Jacek Lach Zakład Oprogramowania Instytut Informatyki Politechnika Śląska

PROGRAMOWANIE w C prolog

Programowanie niskopoziomowe

Podział programu na moduły

Języki i metodyka programowania. Wprowadzenie do języka C

Poprzedni wykład [ ] :

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

Programy pomocnicze: diff, make, systemy rcs i cvs, debugger. Zarządzanie wersjami.

Pobieranie argumentów wiersza polecenia

Zaawansowane programowanie w języku C++ Funkcje uogólnione - wzorce

1 Zapoznanie się ze środowiskiem Xenomai.

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 12 - sem.iii. M. Czyżak

Podstawy Informatyki Wprowadzenie do języka C dr inż. Jarosław Bułat

Języki programowania obiektowego Nieobiektowe elementy języka C++

Ćwiczenie 4. Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1.

Programowanie w C++ Wykład 10. Katarzyna Grzelak. 21 maja K.Grzelak (Wykład 10) Programowanie w C++ 1 / 21

MentorGraphics ModelSim

Programowanie w C++ Wykład 9. Katarzyna Grzelak. 14 maja K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30

Informatyka I : Tworzenie projektu

System operacyjny Linux

Kurs systemu Unix wykład wstępny. Kurs systemu Unix 1

Programowanie obiektowe zastosowanie języka Java SE

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

Laboratorium 0: System Linux, edytor vim i kompilator gcc. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Pliki. Informacje ogólne. Obsługa plików w języku C

Wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

Obsługa plików. Systemy Operacyjne 2 laboratorium. Mateusz Hołenko. 25 września 2011

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Znaki globalne w Linuxie

Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1. Kraków 2013

Programowanie mikrokontrolerów AVR

Rozdział 1. Informacje ogólne

Programowanie Systemów Wbudowanych

Laboratorium 1. I. Zainstaluj program Eclipse (wersja C/C++ w odpowiednim systemie operacyjnym

Język JAVA podstawy. wykład 1, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Formatowane (tekstowe) wejście/wyjście. Binarne wejście/wyjście.

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

Laboratorium Informatyka (I) AiR Ćwiczenia z debugowania

Pliki. Informacje ogólne. Obsługa plików w języku C

Uruchomienie Intel Galileo

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 10 Kurs C++

Utworzenie pliku. Dowiesz się:

Funkcje zawarte w bibliotece < io.h >

Wstęp. #define include include include include include include

Systemy Operacyjne - Operacje na plikach

WYKŁAD 1 - KONSPEKT. Program wykładu:

Podstawy programowania skrót z wykładów:

Łącza nienazwane(potoki) Łącza nienazwane mogą być używane tylko pomiędzy procesami ze sobą powiązanymi.

Struktura programu. Projekty złożone składają się zwykłe z różnych plików. Zawartość każdego pliku programista wyznacza zgodnie z jego przeznaczeniem.

Wstęp do programowania. Wykład 1

Funkcje zawarte w bibliotece < io.h >

Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom).

Linux: System Plików

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Programowanie w języku C++ Grażyna Koba

Technologie Informacyjne - Linux 2

Linux Kernel II. Hello kernel - jak napisać pierwszy moduł

public: // interfejs private: // implementacja // składowe klasy protected: // póki nie będziemy dziedziczyć, // to pole nas nie interesuje

Programowanie w językach wysokiego poziomu

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Wstęp. do języka C na procesor (kompilator RC51)

Transkrypt:

Tworzenie oprogramowania Język C Budowa programu napisanego w języku C podział na pliki z definicjami funkcji, korzystanie z bibliotek systemowych i własnych automatyzacja kompilacji za pomocą make dzielenie projektu na części: katalogi zawierające pliki źródłowe, pliki nagłówkowe, pliki wykonywalne, pliki biblioteczne Narzędzia programisty w środowisku GNU/Linux edytory (vi, vim, mcedit, emacs,kwrite, kate, anjuta,...) kompilator: gcc inne użyteczne narzędzia: o przeszukiwanie dokumentacji (man, apropos, whatis, info, pinfo, GNOME yelp,...) o wyszukiwanie tekstu (grep i wyrażenia regularne) o porównywanie plików (diff, patch) o automatyczne tworzenie dokumentacji: (doxygene, upiększcze kodu indent,...) o debuger (gdb tekstowy, trzeba odpowiednio skompilować program, graficzne: kdbg, ddd,...) 1

Podręcznik systemowy polecenie man Sekcje 2 system calls 3 libraries 4 special, device, files (np. /dev/random, /dev/urandom) 5 file formats Użyteczne polecenia $ whereis printf printf: /usr/bin/printf /usr/include/printf.h /usr/share/man/man1/printf.1.gz /usr/share/man/man3/printf.3.gz /usr/share/man/man1p/printf.1p.gz /usr/share/man/man3p/printf.3p.gz $ man 3 printf PRINTF(3) Linux Programmer's Manual PRINTF(3) NAME printf, fprintf, sprintf, snprintf, vprintf, vfprintf, vsprintf, vsnprintf - formatted output conversion SYNOPSIS #include <stdio.h> int printf(const char *format,...); int fprintf(file *stream, const char *format,...); int sprintf(char *str, const char *format,...); int snprintf(char *str, size_t size, const char *format,...);... DESCRIPTION The functions in the printf family produce output according to a format as described below. The functions printf and vprintf write output to stdout, the standard output stream; fprintf and vfprintf write output to the given output stream; sprintf, snprintf, vsprintf and vsnprintf write to the character string str. $ whatis printf printf printf printf [builtins] $ apropos printf fprintf [printf] printf printf printf [builtins] snprintf [printf] sprintf [printf]... $ info printf (1) - format and print data (1) - bash built-in commands, see bash(1) (1) - format and print data (1) - bash built-in commands, see bash(1) $ info --apropos printf 2

Kompilacja programu Kompilator gcc Przykład wywołania: $ gcc file1.c file2.c file3.c o prog Pełny opis opcji: man gcc Ważniejsze opcje kompilatora gcc -o filename : określa nazwę pliku wynikowego, zawierającego program gotowy do wykonania -c : kompiluj tylko do postaci obiektów (.o), nie łącz -D symbol : definiuj symbol w preprocesorze -I path : gdzie szukać plików nagłówkowych (domyślnie aktualny katalog i katalogi standardowych bibliotek) -L path : określa dodatkowy katalog przeglądany w poszukiwaniu bibliotek -l libname : określa dołączane biblioteki (np. lm oznacza bibliotekę libm.so lub libm.a, w takiej kolejności) -static : dołączaj tylko biblioteki statyczne -O n : określa stopień optymalizacji kodu wynikowego -pedantic : : wyświetl wszystkie ostrzeżenia i błędy wymagane przez standard ANSI -Wall : włącz wszystkie użyteczne ostrzeżenia -v : wyświetl komunikaty o przebiegu kompilacji -std : określa używany standard języka C (np. C99 ) 3

Kompilacja programu za pomocą make Zasada: plik Makefile zawiera cele (ang. targets), które chcemy osiągnąć i reguły (ang. rules) wyjaśniające jak to zrobić. Definiuje się również zależności (ang. dependents, prerequisities), określające kiedy należy ponownie zbudować dany cel. Przykład 1 $ cat p1.c #include <stdio.h> int main() { printf("witaj\n"); return 0; } $ cat Makefile p1: p1.c gcc -Wall p1.c -o p1 $ make gcc -Wall p1.c -o p1 $./p1 Witaj Przykład 2 CC=gcc CFLAGS=-Wall -O2 SOURCES=p1.c OUTFILE=p1 all: $(CC) $(CFLAGS) $(SOURCES) -o $(OUTFILE) Przykład 3 CC=gcc CFLAGS=-Wall -O2 -lm SOURCES=p1.c funkcje.c OUTFILE=p1 all: $(CC) $(CFLAGS) $(SOURCES) -o $(OUTFILE) Przykład 4 CC=gcc CFLAGS=-Wall -O2 SOURCES=prog1.c mylib1.c OUTFILE=prog1 SRCDIR=./src INCDIR=./include LDFLAGS= -lm all: $(CC) $(CFLAGS) $(SRCDIR)/$(SOURCES) $(LDFLAGS) -I$(INCDIR) \ -o $(OUTFILE) 4

Przykład 5 $ ls -R..: include Makefile src./include: func.h./src: func.c main.c $ cat Makefile CC=gcc CFLAGS=-Wall -O2 SOURCES=main.c func.c #to po prostu main.o func.o, tylko krócej OBJECTS=$(SOURCES:.c=.o) OUTFILE=prog1 SRCDIR=./src INCDIR=./include LDFLAGS= -lm all: $(OBJECTS) $(CC) $(LDFLAGS) -o $(OUTFILE) $(OBJECTS) main.o: $(CC) -c $(CFLAGS) -I$(INCDIR) $(SRCDIR)/main.c func.o: $(CC) -c $(CFLAGS) -I$(INCDIR) $(SRCDIR)/func.c clean: rm -f $(OBJECTS) $(OUTFILE) $ make gcc -c -Wall -O2 -I./include./src/main.c gcc -c -Wall -O2 -I./include./src/func.c gcc -lm -o prog1 main.o func.o $ make clean rm -f main.o func.o prog1 5

Biblioteki Zbiór wstępnie skompilowanych funkcji przechowywanych w postaci plików binarnych Ogólny cel: wielokrotne wykorzystywanie kodu Standardowe biblioteki przechowywane są zazwyczaj w /lib i /usr/lib $ ls -c /lib more libnss_winbind.so.2 libnss_wins.so.2 libblkid.so.1 libblkid.so.1.0 libcom_err.so.2 libcom_err.so.2.1... $ ls -c /usr/lib libecpg.a libecpg.so libfwcompiler.so.6.3 librpm-4.3.so libselinux.so libbind.so.3.0.8 libfwbuilder.so.6.3... Rodzaje bibliotek: o biblioteka statyczna - zbiór plików umieszczonych w jednym archiwum, zaleta: funkcje biblioteczne łączone są z programem; wada: rozmiar, program będzie zawierał kod binarny biblioteki o biblioteka współdzielona - zaleta: biblioteka załadowana do pamięci może być współużywana przez wiele programów, jej zmiana nie wymaga ponownej kompilacji każdego programu, który z niej korzysta, wada: złożoność, możliwość kolizji wersji Nazwa biblioteki: o rozpoczyna się od lib o kończy się rozszerzeniem wskazującym rodzaj biblioteki o.a statyczna o.so współdzielona Korzystanie z biblioteki zainstalowanej w systemie: gcc prog.c o prog lm dołączy: /usr/lib/libm.so lub /usr/lib/libm.a 6

Tworzenie biblioteki statycznej Kompilacja i dołączenie do biblioteki gcc c file1.c file2.c file3.c ar rcs moja_biblioteka.a file1.o file2.o file3.o o Biblioteka statyczna nazywana jest również archiwum. Opcje: r dodaj plik do archiwum c utwórz archiwum, jeśli nie istnieje s zapisz indeks plików obiektowych do archiwum Przykład: $ cat libhello.c #include <stdio.h> void print_hello(void) { printf("witam w bibliotece.\n"); } $ cat libhello.h #ifndef M_HELLO #define M_HELLO #include <stdio.h> void print_hello(void); #endif $ gcc -c libhello.c $ ar rcs libhello.a libhello.o $ cat program.c #include "libhello.h" int main(void) { print_hello(); return 0; } $ gcc -o program program.c libhello.a 7

Tworzenie biblioteki współdzielonej Kompilacja z użyciem odpowiedniej opcji: gcc fpic c libhello.c Utworzenie biblioteki: gcc shared Wl,-soname,libhello.so.1 o libhello.so.1.0 libhello.o -lc lub gcc shared Wl,-soname,libhello.so.1 o libhello.so.1.0 libhello.o Instalowanie biblioteki i uruchamianie programu Nie masz uprawnień administratora Załóżmy, że biblioteka znajduje się w katalogu bieżącym Utwórz potrzebne linki symboliczne ln s libhello.so.1.0 libhello.so.1 ln s libhello.so.1 libhello.so Opcjonalnie przygotuj zmienną zawierającą ścieżkę katalogu z biblioteką export SCIEZKA=$(pwd) Skompiluj program gcc -L$SCIEZKA -lhello program.c o program Uruchamianie: LD_LIBRARY_PATH=$SCIEZKA./program lub export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$SCIEZKA./program Masz uprawnienia administratora: Zainstaluj bibliotekę w odpowiednim katalogu systemowym Utwórz odpowiednie dowiązania Opcjonalnie uzupełnij plik /etc/ld.so.conf Wykonaj program ldconfig 8