aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/clang/index.rhtml112
-rw-r--r--docs/clang/index.rhtml.config3
-rw-r--r--navigation.rhtml.inc2
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>), &egrave; una
+ particolare libreria che viene caricata dinamicamente da un applicativo. Quindi, il codice della libreria non
+ &egrave; incluso nell'applicativo stesso, rendendo quest'ultimo pi&ugrave; piccolo in dimensioni, di conseguenza
+ occupando meno memoria.</p>
+<p>Scrivere una libreria non &egrave; diverso rispetto ad un programma, l'unica differenza &grave quest'ultimo
+ avr&agrave; 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 &lt;stdio.h&gt;
+
+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&agrave; 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&agrave; 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>, &egrave; necessario affinch&eacute; 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&agrave; la funzione della libreria:</p>
+<p><i>main.c</i></p>
+<pre class="bordered">
+#include &lt;stdio.h&gt;
+#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>