Programowanie w systemie UNIX/Kompilacja: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
literówki, interpunkcja, formatowanie
Linia 6:
===jeden plik===
[[File:Hello-c.png|right|thumb|Najprostszy program ]]
Najprostsza kompilacja : program = 1 plik.
Plik z kodem programu , np. <code>p.c </code> skompiluj za pomocą komendy :
gcc p.c
 
Otrzymasz plik a.out ( standardowa nazwa)
 
* '''uruchom''' za pomocą :
./a.out
 
 
Możesz '''zmienić nazwę generowanego pliku''' . W tym celu skompiluj go za pomocą komendy :
 
gcc p.c -o p.out
 
* uruchom za pomocą :
./p.out
 
Możesz włączyć wszystkie '''ostrzeżenia''' ( ang. '''W'''arnings '''all''' )
 
gcc -Wall p.c
Linia 32:
[[File:Programmeren in C Foobar inc 2.svg|right|thumb|kilka plików programu]]
 
Możemy skompilować ręcznie :<ref>[http://www.crasseux.com/books/ctutorial/Compiling-multiple-files.html#Compiling%20multiple%20files Compiling-multiple-files - The GNU C Programming Tutorial]</ref>
gcc -o executable sourcefile_1.c sourcefile_2.c ... sourcefile_n.c
Linia 38:
====biblioteki====
 
Na przykładzie biblioteki matematycznej libm w wersji :
 
* statycznej (zwykle /usr/lib/libm.a ) i pliku nagłówkowym math.h ( zwykle /usr/include/math.h )
* ladowanejładowanej dynamicznie ( /usr/lib/libm.so )
 
Aby skorzystać z tej biblioteki należy :
* dodać w pliku <code>p.c </code>: <code>#include <math.h></code>
* w czasie kompilacji dołączyć bibliotekę libm : <code>gcc p.c -lm</code>
 
==Narzędzia do kompilacji ==
Linia 58:
===[[w:autoconf|autoconf]]===
 
Typowo :
./configure
make
make install
 
ale możliwa jest optymalizacja dla procesorów wielordzeniowych :<ref>[http://www.codealpha.net/118/speed-up-compile-make-time-dual-core-or-multi-core-processor/ Speed-up compile (make) time on dual-core (or multi-core) processor!]</ref>
 
./configure
Linia 78:
 
=Optymalizacja=
Można przyspieszyć działanie programu przez odpowiednią kompilację <ref>[[http://jestem.wraju.pl/pop/bookCVFin.pdf Algorytmy przetwarzania obrazów i wst¸epwstęp do pracy z biblioteką OpenCV Pod redakcją : Ewarysta Rafajłowicza, Wojciecha Rafajłowicza i Andrzeja Rusieckiego]]</ref> ( opcje ) i przetestowanie efektu.
Np. dodanie opcji kompilacji :
-O3 -funroll-loops
lub
Linia 86:
Porównaj efekty zaawansowanej optymalizacji tutaj <ref>[http://shootout.alioth.debian.org/ The Computer Language Benchmarks Game ]</ref>
 
Inne opcje :
-mtune=native
generuje kod dostrojony do aktualnego procesora (na innym też się uruchomi).
Linia 92:
wykorzystuje wszystkie instrukcje używanego procesora (jeżeli inny procesor ich nie obsługuje, kod nie będzie działał).
 
Za pomocą instrukcji :
 
gcc -O3 -Q --help=optimizers | grep disabled
 
sprawdzamy wszystkie wyłączone opcje. PrzykłądowyPrzykładowy wynik :
 
<pre>
Linia 170:
 
=Testowanie programu =
Są 2 metody : <ref>[http://www.gamedev.net/topic/569452-gcc-function-for-find-execution-time/ gcc-function-for-find-execution-time - dyskusja na gamedev]</ref>
==Program Time ==
 
gcc -o prog main.c
time prog
 
Przykład użycia :
 
Testujemy ile czasu zajmie 4000 razy wypisaniwypisanie tekstu ( przykładowy kod) :
 
const int iXmax = 4000;
Linia 188:
}
 
Skompilowany :
gcc s.c -lm
 
Uruchomiony :
time ./a.out
real 0m0.267s
Linia 197:
sys 0m0.040s
 
Jeśli usuniemy komendę printf :
 
real 0m0.150s
Linia 210 ⟶ 209:
[[Programowanie_w_systemie_UNIX/gprof|Opis gprof]]
 
Kompilacja z opcją <code>-pg</code> powoduje, że po wykonaniu skompilowanego programu zostaną zapisanie do pliku gmon.out czasy wykonania poszczególnych funkcji
 
gcc -o prog main.c -pg