diff options
-rw-r--r-- | docs/clang/index.rhtml | 112 | ||||
-rw-r--r-- | docs/clang/index.rhtml.config | 3 | ||||
-rw-r--r-- | navigation.rhtml.inc | 2 |
3 files changed, 116 insertions, 1 deletions
diff --git a/docs/clang/index.rhtml b/docs/clang/index.rhtml new file mode 100644 index 0000000..71eb4ea --- /dev/null +++ b/docs/clang/index.rhtml @@ -0,0 +1,112 @@ +<h1>Linguaggio di programmazione C</h1> + +<h2>Indice</h2> +<ol> + <li><a href="#shared_library">Shared library</a></li> + <li><a href="#esempio_pratico">Esempio pratico</a></li> +</ol> + +<h2 id="shared_library">Shared library</h2> +<p class="hyphens">Una <i>shared library</i> (o tradotto letteralmente <i>libreria condivisa</i>), è una + particolare libreria che viene caricata dinamicamente da un applicativo. Quindi, il codice della libreria non + è incluso nell'applicativo stesso, rendendo quest'ultimo più piccolo in dimensioni, di conseguenza + occupando meno memoria.</p> +<p>Scrivere una libreria non è diverso rispetto ad un programma, l'unica differenza &grave quest'ultimo + avrà un punto di accesso, ovvero la funzione <code>main()</code>.</p> + +<h2 id="esempio_pratico">Esempio pratico</h2> +<p>Creare l'implementazione della libreria:</p> +<p><i>planets.c</i></p> +<pre class="bordered"> +#include <stdio.h> + +void +hello_from(int planet) +{ + switch (planet) { + case 1: + printf("Ciao da Mercurio!\n"); + break; + case 2: + printf("Ciao da Venere!\n"); + break; + case 3: + printf("Ciao dalla Terra!\n"); + break; + case 4: + printf("Ciao da Marte!\n"); + break; + case 5: + printf("Ciao da Giove!\n"); + break; + case 6: + printf("Ciao da Saturno!\n"); + break; + case 7: + printf("Ciao da Nettuno!\n"); + break; + case 8: + printf("Ciao da Urano!\n"); + break; + case 9: + printf("Ciao da Plutone!\n"); + break; + deafault: + printf("Ciao dallo spazio profondo!\n"); + break; + } +} +</pre> + +<p>Bisogna creare un file header che verrà utilizzato negli applicativi:</p> +<p><i>planets.h</i></p> +<pre class="bordered"> +#ifndef __PLANETS_H__ +#define __PLANETS_H__ + +#define MERCURIO 1 +#define VENERE 2 +#define TERRA 3 +#define MARTE 4 +#define GIOVE 5 +#define SATURNO 6 +#define NETTUNO 7 +#define URANO 8 +#define PLUTONE 9 + +/* la funzione va dichiarata extern in modo da poterla usare in applicativi esterni */ +extern void hello_from(int); + +#endif +</pre> + +<p>Per compilare la libreria basta dare il seguente comando:</p> +<pre>$ cc -fPIC -c planets.c</pre> +<p>Si otterrà quindi il file <i>planets.o</i>.</p> +<p>Successivamente eseguire il seguente comando per ottenre la shared library:</p> +<pre>$ cc -shared planets.o -o libplanets.so</pre> +<p>Da notare che il file di output ha come prefisso <i>lib</i>, è necessario affinché il sistema + operativo riesca a trovare la libreria.</p> +<p>I parametri usati durante la compilazione:</p> +<ul> + <li>-fPIC to enable position independent code</li> + <li>-shared to specify creating a shared library</li> +</ul> + +<p>A questo punto, creare un file <code>main.c</code> che richiamerà la funzione della libreria:</p> +<p><i>main.c</i></p> +<pre class="bordered"> +#include <stdio.h> +#include "planets.h" + +int main(void) +{ + hello_from(TERRA); + return 0; +} +</pre> +<p>Per compilare l'applicativo, bisogna specificare al linker quale libreria usare:</p> +<pre>$ cc -L./ main.c -o planets -lplanets</pre> +<p>Attenzione, la libreria dev'essere messa nelle directory di sistema. Altrimenti se si vuole distribuire il binario + dell'applicativo con la libreria, basta eseguire questo comando:</p> +<pre>$ cc -L./ -Wl,-rpath=./ main.c -o planets -lplanets</pre> diff --git a/docs/clang/index.rhtml.config b/docs/clang/index.rhtml.config new file mode 100644 index 0000000..e501178 --- /dev/null +++ b/docs/clang/index.rhtml.config @@ -0,0 +1,3 @@ +title: Linguaggio di programmazione C +category: notes +pageNames: [clang]
\ No newline at end of file diff --git a/navigation.rhtml.inc b/navigation.rhtml.inc index 3d5bece..93eea84 100644 --- a/navigation.rhtml.inc +++ b/navigation.rhtml.inc @@ -37,7 +37,7 @@ <li><a class="dropdown-item <%= @pageNames != nil && @pageNames[0] == 'querydsl' ? 'active' : '' %>" href="/docs/querydsl/querydsl.html">QueryDSL</a></li> <li><a class="dropdown-item <%= @pageNames != nil && @pageNames[0] == 'shell' ? 'active' : '' %>" href="/docs/shell/">Shell</a></li> <li><hr class="dropdown-divider" /> - <li><a class="dropdown-item <%= @pageNames != nil && @pageNames[0] == 'c' ? 'active' : '' %>" href="#">C</a></li> + <li><a class="dropdown-item <%= @pageNames != nil && @pageNames[0] == 'c' ? 'active' : '' %>" href="/docs/clang/">C</a></li> <li><a class="dropdown-item <%= @pageNames != nil && @pageNames[0] == 'java' ? 'active' : '' %>" href="/docs/java/">Java</a></li> <li><a class="dropdown-item <%= @pageNames != nil && @pageNames[0] == 'ruby' ? 'active' : '' %>" href="#">Ruby</a></li> </ul> |