Sviluppare codice nativo per Windows e Linux con .NET Core

di Cristian Civera, in .NET Standard,

La tecnologia .NET è ormai presente da 20 anni, dapprima nata esclusivamente per i sistemi Windows, ma da alcuni anni è disponibile sulle piattaforme Linux e Mac e su architetture diverse (x86, x64, ARM). Ormai troviamo librerie di tutti i tipi, distribuite tramite NuGet e, nelle maggior parte dei casi, sono disponibili per tutte le piattaforme, grazie alla natura agnostica delle DLL. Esse vengono compilate in un linguaggio intermediario IL (intermediate language) per poi essere convertite in linguaggio macchina in fase di esecuzione, a seconda del runtime che lo esegue.

Una parte di queste librerie, soprattutto quelle del CoreCLR, espongono funzionalità che vengono implementate nativamente sulla piattaforma in cui girano. Funzionalità come allocare la memoria, I/O su disco e su rete e il threading sono possibili, perché sfruttati a seconda del sistema operativo. Queste librerie sono in grado di effettuare le rispettive chiamate verso le API del Kernel nelle quali vengono eseguite dandoci apparentemente l'impressione che il nostro codice sia identico su tutti i sistemi operativi, ma che in realtà viene eseguito con delle differenze, seppur minimali.

E' inevitabile quindi che ci siano delle situazioni in cui da .NET Core dobbiamo sfruttare delle funzionalità di un sistema operativo specifico, o delle istruzioni specifiche di un processore. E' facile trovarsi di fronte a degli SDK per dispositivi esterni (camere, lettori, ecc) la cui unica libreria è in stile C/C++. Oppure ancora ci sono delle librerie ad alte prestazioni che per trarre il massimo dal sistema operativo e dai processori, sono scritte in C++, lavorano con puntatori e generano librerie per ogni rispettiva piattaforma.

In questo articolo vogliamo affrontare di conseguenza come possiamo realizzare delle librerie per .NET che sfruttino codice nativo, appositamente scritto, per supportare le nostre esigenze. L'idea è quella di:

  • Sviluppare una libreria nativa che possa essere compilata per Windows e Linux;
  • Caricarla ed invocarla da una classe .NET che ne esponga le sue funzionalità;
  • Creare un pacchetto NuGet per facilitare il suo utilizzo.

Per prendere in considerazione un caso reale, utilizziamo una libreria sviluppata dal sottoscritto e disponibile all'indirizzo https://github.com/Ricciolo/libfacedetection.net. Essa espone un algoritmo di ricerca dei visi basato su intelligenza artificiale, molto rapido che non necessità di alcuna dipendenza.

Partiamo quindi dal realizzare il primo passo: la libreria nativa.

Make con Visual Studio

Per realizzare una libreria nativa è necessario prima di tutto avere un compilatore per un linguaggio specifico che sia in grado di supportare le piattaforme da noi desiderate. Nell'ambito Windows il compilatore di Visual C++ è sicuramente tra i migliori e lo troviamo all'interno di Visual Studio. Con l'introduzione della versione 2019, inoltre, è in grado anche di supportare lo sviluppo per Linux permettendoci di sfruttare altri due compilatori famosi: gcc e clang. Essi possono essere usati anche per compilare su macOS e su architetture ARM. Infine, è stato aggiunto anche il supporto a make, una utility molto diffusa nell'ambito dello sviluppo in C++, in particolar modo sulle piattaforme UNIX like.

8 pagine in totale: 1 2 3 ... 5 6 7 8
Contenuti dell'articolo

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

Top Ten Articoli

Articoli via e-mail

Iscriviti alla nostra newsletter nuoviarticoli per ricevere via e-mail le notifiche!

In primo piano

I più letti di oggi

In evidenza

Misc