Autore Topic: Librerie statiche e dinamiche  (Letto 2735 volte)

Offline clros

  • ASM Lover
  • *****
  • Post: 457
  • Karma: +3/-1
    • Mostra profilo
Librerie statiche e dinamiche
« il: 24 Novembre 2011, 20:17:16 »
Ciao a tutti...
Sto facendo un po' di confusione, potreste brevemente indicarmi le differenze tra i file .so e .a ??
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »
Claudio CP La Rosa

Offline clros

  • ASM Lover
  • *****
  • Post: 457
  • Karma: +3/-1
    • Mostra profilo
Re: Librerie statiche e dinamiche
« Risposta #1 il: 24 Novembre 2011, 22:20:28 »
Citazione da: "dsar"
.so è shared object, .a è archive
Il primo viene usato per il dynamic loading di librerie, il secondo per il linking statico.

Oggi non ha molto senso usare il linking statico, anticamente lo si preferiva per le prestazioni e per semplicità (un file contro tanti file). Oggi per motivi di granularità e differenze irrisorie tra dynamic e static linking si preferisce il primo.

O vuoi sapere qualcosa in particolare?

Descrivo il mio problema.

librerie BOOST ---> miaLibreria --> applicativo

miaLibreria è una libreria che sto scrivendo (una .so) basandomi sulle librerie di BOOST.

Vorrei fare in modo che una volta compilata, miaLibreria sia totalmente indipendente dalle librerie BOOST (per questo credo che dovrei linkare le librerie BOOST statiche cioè le .a) e quindi gli applicativi possano essere scritti senza nessuna dipendenza dalle librerie BOOST (il codice di BOOST dovrebbe essere inglobato totalmente in miaLibreria.

Come fare?
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »
Claudio CP La Rosa

Offline clros

  • ASM Lover
  • *****
  • Post: 457
  • Karma: +3/-1
    • Mostra profilo
Re: Librerie statiche e dinamiche
« Risposta #2 il: 24 Novembre 2011, 23:15:58 »
Citazione da: "dsar"
Lo puoi fare, ma non è molto versatile e conveniente. E se un giorno volessi cambiare librerie di threading?

Inoltre dovresti stare attento alle licenze GPL, che sono virali nel caso di linking statici

Per il Threading uso il C++11  :mrgreen:  No, cmq non credo di cambiarle in futuro...
Poi non mi sembra che le BOOST siano sotto licenza GPL...

In ogni caso..cm fare??
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »
Claudio CP La Rosa

Offline clros

  • ASM Lover
  • *****
  • Post: 457
  • Karma: +3/-1
    • Mostra profilo
Re: Librerie statiche e dinamiche
« Risposta #3 il: 24 Novembre 2011, 23:51:53 »
Citazione da: "dsar"
Citazione da: "clros"
Per il Threading uso il C++11  :mrgreen:  No, cmq non credo di cambiarle in futuro...
Ah vero

Citazione da: "clros"
In ogni caso..cm fare??
Puoi linkare un .a ad un .so, è tutta questione di impostazioni del linker. Che compilatore usi?

Uso lo GCC sotto Linux.
La verità è che non ci sto capendo nulla...fino ad ieri funzionava, oggi ho cambiato qlk impostazione e non funge più :(

Praticamente ho compilato la miaLibreria come .so linkando ad essa le librerie statiche (.a) di Boost. (credo che questo sia il modo corretto per non dipendere più da boost...)
Però ads, quando tento di compilare/linkare gli applicativi che usano miaLibreria.so, ottengo un bel pò di errori dal linker e non capisco come mai :'(
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »
Claudio CP La Rosa

Offline clros

  • ASM Lover
  • *****
  • Post: 457
  • Karma: +3/-1
    • Mostra profilo
Re: Librerie statiche e dinamiche
« Risposta #4 il: 24 Novembre 2011, 23:59:02 »
Credo di aver scoperto il problema: compilavo miaLibreria.so senza aver linkato una libreria che serviva per il suo codice (quella per le regex); curioso che il compilatore non battesse ciglio...
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »
Claudio CP La Rosa

Offline rebraist

  • Nerd
  • *****
  • Post: 946
  • Karma: +13/-1
    • Mostra profilo
Re: Librerie statiche e dinamiche
« Risposta #5 il: 30 Novembre 2011, 16:36:46 »
visto che mi trovo...
e la differenza tra le .library di aros (amiga) e le .a?
se per ottenere una .a con gcc compilo con -c e poi uso l'archiver, per ottenere una .library che riga di comando do??
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »
Amigaos spacca.
Aros rulla.
Morphos corre di brutto.
Sinceramente, non vorrei che mio figlio facesse amicizia con uno di questi tre tipacci.
Dottore:lei é uno di quelli che si potrebbero definire nerd...
Io: dottò, lo so di mio. Sono pure iscritto a 'n'forum...
Dottore: su internet?
Io: no a rete 4

Offline clros

  • ASM Lover
  • *****
  • Post: 457
  • Karma: +3/-1
    • Mostra profilo
Re: Librerie statiche e dinamiche
« Risposta #6 il: 03 Dicembre 2011, 15:24:06 »
Citazione da: "rebraist"
visto che mi trovo...
e la differenza tra le .library di aros (amiga) e le .a?
se per ottenere una .a con gcc compilo con -c e poi uso l'archiver, per ottenere una .library che riga di comando do??

Non vorrei dire una cavolata (non ricordo più bene) ma non puoi creare delle .library con il solo aiuto del compilatore. Le .library sono una cosa esclusivamente di Amiga, non riguardano il C o il C++.
Dovresti creare un sorgente con dei metodi predefiniti che caratterizzano tutte le .library e poi compilare "normalmente".
Cmq, qualcuno saprà darti informazioni più dettagliate di quanto sto facendo io...
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »
Claudio CP La Rosa

Offline cdimauro

  • Human Debugger
  • *****
  • Post: 4291
  • Karma: +7/-95
    • Mostra profilo
Re: Librerie statiche e dinamiche
« Risposta #7 il: 03 Dicembre 2011, 18:45:08 »
Io le scrivevo in assembly, e tra l'altro penso di aver perso anche parecchio del mio lavoro (non lo trovo più :cry: ).

Offline rebraist

  • Nerd
  • *****
  • Post: 946
  • Karma: +13/-1
    • Mostra profilo
Re: Librerie statiche e dinamiche
« Risposta #8 il: 03 Dicembre 2011, 21:37:27 »
grazie per le risposte.
indago un pò in giro!!
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »
Amigaos spacca.
Aros rulla.
Morphos corre di brutto.
Sinceramente, non vorrei che mio figlio facesse amicizia con uno di questi tre tipacci.
Dottore:lei é uno di quelli che si potrebbero definire nerd...
Io: dottò, lo so di mio. Sono pure iscritto a 'n'forum...
Dottore: su internet?
Io: no a rete 4

Offline raistlin77it

  • Tech Guru
  • *****
  • Post: 221
  • Karma: +2/-0
    • Mostra profilo
Re: Librerie statiche e dinamiche
« Risposta #9 il: 04 Dicembre 2011, 01:52:54 »
Citazione da: "clros"
Citazione da: "rebraist"
visto che mi trovo...
e la differenza tra le .library di aros (amiga) e le .a?
se per ottenere una .a con gcc compilo con -c e poi uso l'archiver, per ottenere una .library che riga di comando do??

Non vorrei dire una cavolata (non ricordo più bene) ma non puoi creare delle .library con il solo aiuto del compilatore. Le .library sono una cosa esclusivamente di Amiga, non riguardano il C o il C++.
Dovresti creare un sorgente con dei metodi predefiniti che caratterizzano tutte le .library e poi compilare "normalmente".
Cmq, qualcuno saprà darti informazioni più dettagliate di quanto sto facendo io...

si vero, le librerie .a (che vengono linkate alla creazione del programma) e le .library amiga sono due cose completamente diverse.
Ma lo stesso vale per le .a e .dll di windows per esempio.

/spiegazione spannometrica ON
Quando crei una libreria da caricare runtime all'esecuzione di uno o più programmi è necessaria tutta un'interfaccia "verso" l'esterno della libreria .
Nel caso amiga ad esempio,la "muibase" che richiami  per i programmi mui o le varie api di mui, sono tutte parti della libreria che vengono condivide col sistema operativo e che quindi rispondono sia al tuo programma, che magari ad altri prog che si interfacciano alla libreria oltre che il s.o. stesso.

una cosa è ad esempio :

programmo un "prova.c" e  "prova.h"
compilo prova.c in prova.a
includo prova.h in mioprogramma.c e linko prova.a

un'altra cosa è :
compilo prova.c +prova.h in prova.library
compilo separatamente mioprogramma.c  interfacciandomi tramite il s.o. a prova.library

/spiegazione spannometrica OFF

in pratica è un BORDELLO TOTALE :D :D

ti consiglio di spulciare sdk-20110916morphossdksdkDevelopmentExamplesLibrary dell'SDK di MorphOS per avere degli esempi
pratici .
Io che non ho il background necessario ,non ci ho capito molto, comunque lì trovi come inizializzare una libreria, come creare una lista di "funzioni" della libreria accessibili dall'esterno, come chiuderla etc.
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »

Offline ShInKurO

  • Tech
  • *****
  • Post: 66
  • Karma: +0/-0
    • Mostra profilo
Re: Librerie statiche e dinamiche
« Risposta #10 il: 04 Dicembre 2011, 06:39:44 »
Io una volta feci una libreria .library, non è una cosa semplice, soprattutto se vuoi che la libreria vada su tutti e 4 gli OS :)
La comune base è ovviamente quella di OS3.x, ma ciascun OS ha le sue diversità, basta che ti spulci i sorgenti della libreria codesets.library, ovviamente devi saper guardare: damato e thore hanno aggiunto dei file che permettono la compilazione sui 4 OS, e si occupano di gestire le loro differenze.

In sostanza una libreria Amiga deve avere una manciata di funzioni che sono da implementare obbligatoriamente, queste funzioni non devono contenere robe della libreria standard C. Più che guardare l'SDK di Mos devi spararti nelle vene ( :D nel senso che devi capire TUTTO) 2 o 3 capitoli del libro RKRM Library insieme a qualche articolo di Amiga Magazine :)

Quando avrò il powerbook e se mi fanno scendere a natale a Messina prenderò tutto il materiale che ho su A1 e mi metterò ad aggiornare la mia guida alla programmazione Amiga, difatti avevo previsto un capitolo solo per le librerie che ancora dovevo scrivere :)

Su ATML anni fa mi aiutarono in molti per questa mia prova, quindi ho bisogno anche di quel materiale per scrivere ;)
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »

Offline rebraist

  • Nerd
  • *****
  • Post: 946
  • Karma: +13/-1
    • Mostra profilo
Re: Librerie statiche e dinamiche
« Risposta #11 il: 04 Dicembre 2011, 18:15:34 »
grazie ancora!
sto utilizzando una library opensource.
per me è assurdo dover aprire "manualmente" l'interfaccia (la base per capirci).
se provo ad aprire in automatico gcc mi restituisce errore.
e mi capita solo con le .library.
capire come funziona una library è allora un must.
perchè così me la converto in una .a
...
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »
Amigaos spacca.
Aros rulla.
Morphos corre di brutto.
Sinceramente, non vorrei che mio figlio facesse amicizia con uno di questi tre tipacci.
Dottore:lei é uno di quelli che si potrebbero definire nerd...
Io: dottò, lo so di mio. Sono pure iscritto a 'n'forum...
Dottore: su internet?
Io: no a rete 4

Tags: