Newsgroup: it.comp.lang.c++
Titolo: Librerie cross-platform

vorrei scrivere una libreria in c/c++ che perň sia possibile compilare
sia su windows che su linux (cioč da cui sia possibile creare sia una
.dll che uno .so)... lo standard dice qualcosa su come creare una
libreria?
ad esempio, le funzioni so che devono essere dichiarate con qualcosa
che indichi che le si vuole esportare...
in c++builder si scrive
__declspec(dllexport)
ma dubito che questo sia standard...
oltretutto ho visto che le librerie windows hanno un "entrypoint",
cosa che manca completamente in linux... dunque ne sapete qualcosa? ci
sono informazioni in rete?
grazie
]\/[ad]\/[age
"Un Maestro nell'arte della vita, non fa nessuna precisa distinzione tra lavoro
e gioco, fatica e riposo, mente e corpo, educazione e ricreazione. 
Insegue semplicemente la sua visione di Eccellenza attraverso qualunque cosa sta facendo e lascia agli altri decidere se sta lavorando o giocando. A lui sembra sempre che sta facendo entrambe le cose." - Anonimo.
.-~-.-~-. 
www.madmagelab.cjb.net
 .-~-.-~-.

libreria?
No lo standard non dice niente e devi rivolgerti al ng per la tua
piattaforma, l'unica cosa standard che devi ricordarti di fare è usare
extern "C" che fa in modo che i nomi non siano decorati.
-- 
Marco Barisione (ICQ 84277092)
Su it.news.gruppi si sta discutendo della creazione di it.comp.lang
dove si parlerà dei linguaggi senza un proprio newsgroup e dei
confronti fra i diversi linguaggi.
Se sei interessato unisciti alla discussione.

libreria?
Lo standard del C++ non tratta i metodi con cui vengono realizzate le
librerie, in quanto si tratta di un'operazione os-dependent.
La tecnica di lasciare la libreria a livello di sorgente invece viene
spesso usata(in questo modo é anche più facile per l'utilizzatore
poter apportare correzioni o aggiungi)e penso che sia l'unica che
garantisca la portabilità.
Il Ghenio
-----
These are my parting words to you:
those who give up are doomed!
-----

 extern "C" che fa in modo che i nomi non siano decorati.
Non č mica necessario. Non sta scritto da nessuna parte che una DLL (o
un .so) debba avere linkage C invece che C++. Questa č una tua scelta
che di solito fai se vuoi che la libreria sia utilizzabile anche da
programmi C o da programmi che accettano librerie i cui componenti hanno
linkage C.
--
Andrea Ferro
---------
Brainbench C++ Master. Scored higher than 97% of previous takers
Scores: Overall 4.46, Conceptual 5.0, Problem-Solving 5.0
More info 
http://www.brainbench.com/transcript.jsp?pid=2522556

linkage C.
Ma la decorazione dei nomi non varia da compilatore a compilatore? Se
č cosě devi usare lo stesso compilatore per poter usare le librerie.


 wrote in message
news:3bcc559...@News.CIS.DFN.DE...

Piů precisamente devi compilare le librerie con il compilatore con cui
le usi. Cosa che resta vera anche se usi il linkage C a meno che nella
libreria tu non ti astenga dall'usare direttamente o indirettamente una
qualunque funzione di libreria standard in maniera non completamente
"incapsulata". Per esempio se usi gli stream o accedi in qualche maniera
ai file o se usi memcpy o cose simili. Oppure se vuoi usare new nella
libreria e poi fare delete nel programma o viceversa.
In pratica ti trovi quasi sempre a dover compilare la libreria con il
compilatore che usi per compilare il programma. Quindi la cosa č
irrilevante.


libreria e poi fare delete nel programma o viceversa.
Questi li sapevo ma non di memcpy, perché non si può? non dovrebbe
solo copiare della memoria?


 wrote in message
news:3bcd3c3a...@News.CIS.DFN.DE...

Si. Ma se il compilatore che usi per compliare la libreria ha un memcpy
come funzione mentre quello che compila il programma l'ha come intrinsic
la cosa non funziona più.
Naturalmente l'eccezione a tutto questo è Windows dove la maggior parte
delle funzioni di questo tipo fanno parte delle API del sistema
operativo.


 operativo.
...e dove se non linki con VC sei morto.
Ciao,
Nicola