From c9d49bba90e59b55e9470b897215e182627e4b77 Mon Sep 17 00:00:00 2001 From: Alessandro Iezzi Date: Mon, 31 Oct 2022 17:29:39 +0100 Subject: Add C language programming notes --- docs/clang/index.rhtml | 112 ++++++++++++++++++++++++++++++++++++++++++ docs/clang/index.rhtml.config | 3 ++ navigation.rhtml.inc | 2 +- 3 files changed, 116 insertions(+), 1 deletion(-) create mode 100644 docs/clang/index.rhtml create mode 100644 docs/clang/index.rhtml.config 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 @@ +

Linguaggio di programmazione C

+ +

Indice

+
    +
  1. Shared library
  2. +
  3. Esempio pratico
  4. +
+ +

Shared library

+

Una shared library (o tradotto letteralmente libreria condivisa), è 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.

+

Scrivere una libreria non è diverso rispetto ad un programma, l'unica differenza &grave quest'ultimo + avrà un punto di accesso, ovvero la funzione main().

+ +

Esempio pratico

+

Creare l'implementazione della libreria:

+

planets.c

+
+#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;
+    }
+}
+
+ +

Bisogna creare un file header che verrà utilizzato negli applicativi:

+

planets.h

+
+#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
+
+ +

Per compilare la libreria basta dare il seguente comando:

+
$ cc -fPIC -c planets.c
+

Si otterrà quindi il file planets.o.

+

Successivamente eseguire il seguente comando per ottenre la shared library:

+
$ cc -shared planets.o -o libplanets.so
+

Da notare che il file di output ha come prefisso lib, è necessario affinché il sistema + operativo riesca a trovare la libreria.

+

I parametri usati durante la compilazione:

+ + +

A questo punto, creare un file main.c che richiamerà la funzione della libreria:

+

main.c

+
+#include <stdio.h>
+#include "planets.h"
+
+int main(void)
+{
+  hello_from(TERRA);
+  return 0;
+}
+
+

Per compilare l'applicativo, bisogna specificare al linker quale libreria usare:

+
$ cc -L./ main.c -o planets -lplanets
+

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:

+
$ cc -L./ -Wl,-rpath=./ main.c -o planets -lplanets
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 @@
  • QueryDSL
  • Shell
  • -
  • C
  • +
  • C
  • Java
  • Ruby
  • -- cgit v1.2.3