Newsgroup: it.comp.lang.c++
Titolo: Esaurimento nervoso: C++,VC++,NET e famiglia!

Premetto che sono un amatoriale e che ero interessato al C++ x scopi 
casalinghi, non x lavoro.
Ho programmato in VB poi è uscito il NET e mi sono convertito. Stavo 
facendo un'applicazione Client-server. L'ho provata su un'altro PC e mi 
ha richiesto 21 Mb di librerie framework.
Un po' scoraggiato, non vorrei dover dare 21Mb tutte le volte che dò ad 
un amico la mia applicazione, ho iniziato a guardare il C++.
Ho fatto circa la stessa cosa col Borland 6, anche qui quando lo eseguo 
su un'altro PC mi dà subito un errore che manca un file blc.
Adesso sto guardando i sorgenti di Emule e mi accorgo che è stato 
compilato in VC++.
A parte la mia mancanza di basi, ma possibile che tutti gli EXE che 
faccio hanno sempre bisogno di qualche libreria immensa?
Emule x esempio, non ha bisogno di nessuna DLL o Libreria. Come faccio e 
con quale C++ posso realizzare una cosa del genere? un'applicazione che 
ha tutto quello che le serve x funzionare, in C++, client-server!
Grazie

 ha tutto quello che le serve x funzionare, in C++, client-server!
eMule ha bisogno di una libreria di oltre un gigabyte; si chiama
Microsoft Windows.
Oggigiorno e' impensabile fare un'applicazione grafica che non si
appoggi su del software scritto da altri.
Tale software su cui si appoggia l'applicazione si chiama, a seconda del
livello, sistema operativo, middleware, supporto run-time.
Il problema e' che se tale software di supporto non e' gia' installato
nel computer su cui deve essere eseguita l'applicazione, dovra' essere
installato appositamente.
Questo fa sorgere alcuni problemi:
1. La dimensione del software da consegnare aumenta.
2. Il tempo di copia e installazione del software aumenta.
3. Se il software di supporto viene installato nella stessa directory
dell'applicazione, si occupa molto spazio su disco e in memoria, che
potrebbe essere condiviso con altre applicazioni. Se invece lo si
installa a livello di sistema, si rischia di compromettere il
funzionamento di altre applicazioni.
Chiaramente, se si decide di utilizzare una particolare piattaforma
(processore + sistema operativo + GUI), usando direttamente le
funzionalita' messe a disposizione da tale piattaforma si riduce la
necessita' di ricorrere a software di supporto. Tuttavia, risulta
necessario fare un tipo di programmazione a basso livello, che e' ben
poco produttiva, cioe' richiede molto piu' tempo del necessario.
Per esempio, anche eMule usa delle librerie, ma le incorpora
nell'eseguibile, e se avessero sviluppato eMule con un linguaggio a 
livello piu' alto, lo sviluppo avrebbe richiesto meno tempo e (forse) 
meno programmatori.
I linguaggi C e C++ richiedono che gli ambienti di sviluppo siano dotati 
di librerie standard. Comunemente, pero' gli ambienti di sviluppo per 
tali linguaggi sono dotati anche di altre librerie, non standard. 
Inoltre esistono in Internet innumerevoli librerie non standard 
utilizzabili da programmi scritti in C++.
Ogni volta che dal codice applicativo si richiama una funzione di una 
libreria, si "lega" l'applicazione a tale libreria.
Affinche' un programma sia eseguibile su un altro computer, bisogna 
intallare su quel computer tutte le librerie utilizzate dal programma.
Molte librerie possono essere inglobate nel file eseguibile del 
programma. Pertanto l'utente non vede che il programma usa una libreria, 
ma vede che il file eseguibile e' piuttosto grande.
Alternativamente, si lascia la libreria esterna al programma, e si 
ottiene un eseguibile piccolo, ma che deve essere distribuito insieme 
alla libreria. Questo secondo approccio ha il vantaggio che se la 
libreria e' usata da piu' programmi, basta installarla una sola volta e 
viene condivisa sia su disco che in memoria principale da tutti i 
programmi che la usano. Un altro vantaggio e' che se si installano 
aggiornamenti del programma, non e' necessario reinstallare la libreria.
L'argomento e' molto complesso, ed e' abbastanza slegato dal linguaggio 
di programmazione, in quanto tutti i linguaggi hanno librerie. Inoltre, 
molte librerie (come per esempio come il Framework .NET) sono 
utilizzabili da piu' linguaggi.
-- 
     Carlo Milanesi
 
http://digilander.libero.it/carlmila

Secondo me confondi e parecchio il linguaggio, l'ambiente di sviluppo e 
l'ambiente operativo-framework
Basic, C++, Pascal, Java... sono i linguaggi
VB, VC, Delphi, Builder, JBuilder, Eclipse... sono gli ambienti di sviluppo
Win32, .Net, JavaVM, Linux... sono gli ambienti in cui devono "girare" i 
programmi
Tu per fare un programma devi scegliere una combinazione di questi tre 
elementi
Alcune di queste combinazioni sono usatissime tipo Pascal-Delphi-Win32 ma 
oggi puoi pure trovare Pascal-Delphi-.Net
Mo chiaramente se fai un programma per .Net e vuoi farlo girare ci vuole per 
forza il .NetFramework come quando fai un programma Java ti ci vuole la 
JavaVirtualMachine
In merito al programma che hai fatto con Bulder tu avrai fatto certamente 
un'applicazione win32
Mo, adto ceh l'applicazione ceh hai fatto tu è giusto di prova ed è 
piccolina non te ne accorgi ma quei volponi della Borland le hanno pensate 
tutte
Di default (forse sbagliano) ti fanno complilare il progetto con le 
RuntimeLibrary in modo ceh se fai un progetto grosso, con decine di dll, hai 
le librerie comuni una sola volta invece che duplicate in ogni 
eseguibile-dll
Inoltre, se fai uso di Package puoi pure non mettere quelli nell'eseguibile 
e linkarli a runtime
Questo è quello che ti è successo, hai compilato con le runtime library
Se vedi nel menu Options trovi tutto
Dire che poi eMule non abbia bisogno di librerie mi pare una fesseria
Ha bisogno di un sacco di librerie solo che sono tanto comuni che stanno su 
ogni pc di questo mondo e non c'è bisogno di portarsele dietro 
esplicitamente 

 L'argomento e' molto complesso, 
CUT
Intanto grazie x la risposta alle mie newbies domandi.
Un ultima delucidazione: ho provato a compilare in VC++ l'applicazione 
che in 
VB.NET
 richiedeva Framework e in Borland C++ mi dava errore (un 
semplice server in ascolto su una porta, niente di ecclatante).
Le librerie usate sono .lib e .h inserite nel linker e con #pragma nel 
codice sorgente (passami qualche imprecisione dei termini sicuramente 
impropri).
Eseguito su WinXP non ha dato errori e funziona.
In definitiva quindi ipotizzo che queste librerie mi sono state incluse 
nell'EXE o che sono già di default dentro windows giusto?
Come faccio a sapere quali sono le librerie già incluse in winXP?
Grazie ancora.

 Come faccio a sapere quali sono le librerie già incluse in winXP?
Non saprei, forse cercandole nel CD di installazione.
Invece, puo' servirti sapere quali DLL sono usate da un dato programma.
A questo scopo puo' servirti la utility Dependency Walker, che trovi a 
questo link:
http://www.windll.com/
Comunque le qestioni specifiche della piattaforma Windows qui sono 
Off-Topic.
Dovresti spostarti su it.comp.programmare.win32.


 su un'altro PC mi dà subito un errore che manca un file blc.
C'è una opzioncina sulle proprietà del progetto... 
Project->Options->Packages->Build with runtime packages... ti linka le 
lib direttamente nell'EXE del programma, che in questo modo non ha 
bisogno di niente e può girare da solo. L'EXE aumenta di circa 200Kb 
(nelle prove che ho fatto io).