Newsgroup: it.comp.os.linux.development
Titolo: seconda beta delle faq

			    _________   ____
			   / ____/   | / __ \
			  / /_  / /| |/ / / /
			 / __/ / ___ / /_/ /
			/_/   /_/  |_\___\_\
		newsgroup it.comp.os.linux.development
Ultimo aggiornamento: 19 Giugno 2003
Sezione 1: Domande generali.
1.1 Quali linguaggi sono disponibili per sviluppare sotto linux?
1.2 Quali sono gli IDE disponibili per i vari linguaggi?
1.3 Ho creato  il mio  primo  programma  in Linux,  ma quando  lo eseguo
    ottengo "command not found".
1.4 Esiste Visual Basic per linux?
1.5 E Delphi?
1.6 Come faccio a fare le parentesi { } ?
Sezione 2: Compilatore e makefiles.
2.1 Come posso compilare un programma C/C++?
2.2 Il  mio programma è suddiviso  su più file, come  posso creare degli
    object e poi linkarli in un unico esegubile?
Sezione 3: Applicazioni grafiche
3.1 Desidero  fare un programma  con finestre e pulsanti,  che strumenti
    devo usare?
3.2 E per fare un programma "multimediale"?
Sezione 4: Documentazione on line
4.1 Documenti generali
4.2 Bash
4.3 Programmazione di rete
------------------------------------------------------------------------
Sezione 1: Domande generali.
1.1 Quali linguaggi sono disponibili per sviluppare sotto linux?
Praticamente tutti. C/C++, Java, Perl,  Pascal, Ruby, Python, PHP, Kylix
(Delphi) e molti altri ancora. Molti  programmi in Linux sono scritti in
C/C++,  tuttavia in  questi ultimi  anni  si stanno  affermando anche  i
linguaggi interpretati come Ruby o  Python. La scelta ovviamente dipende
molto da cosa si intende sviluppare!
1.2 Quali sono gli IDE disponibili per i vari linguaggi?
Tra gli IDE  più "trendy" del momento c'è senz'altro  Anjuta e KDevelop,
tuttavia non  è da sottovalutare  l'uso di  semplici editor come  gvim o
emacs  che  hanno  un  ottimo interfacciamento  con  i  compilatori  più
diffusi.
1.3 Ho creato  il mio  primo  programma  in Linux,  ma quando  lo eseguo
    ottengo "command not found".
In  Linux gli  eseguibili  vengono cercati  nelle directory  specificate
dalla  variabile  d'ambiente  PATH.  Solitamente  il  PATH  non  include
la   directory  corrente,   quindi  devi   lanciare  il   programma  con
./nomeprogramma oppure modificare il  PATH affinché includa la directory
corrente, ma questo è altamente sconsigliato.
1.4 Esiste Visual Basic per linux?
Grazie   al   cielo  no.   Tuttavia   dovrebbe   possibile  usare   Mono
(
http://www.go-mono.org
)   per   compilare    il   codice   scritto   in
VisualBasic.Net (il compilatore  CIL e le librerie  grafiche sono ancora
in alfa).
1.5 E Delphi?
La  Borland ha  sviluppato kylix,  un  software proprietario,  che è  il
porting di delphi per linux.
1.6 Come faccio a fare le parentesi { } ?
AltGr+7 AltGr+0
oppure
AltGr+8 AltGr+9
Sezione 2: Compilatore e makefiles.
2.1 Come posso compilare un programma C/C++?
Per il C: gcc nomesorgente.c -o nome_dell'eseguibile
Per il C++ g++ nomesorgente.cpp -o nome_dell'eseguibile
2.2 Il  mio programma è suddiviso  su più file, come  posso creare degli
    object e poi linkarli in un unico esegubile?
Per  fare  questo devi  compilare  i  signoli  file con  gcc/g++  usando
l'opzione -c che crea, per l'appunto, un object. Il link viene fatto dal
comando ld,  o più banalmente si  può sempre usare gcc  che provvedere a
richiamare ld. L'automatizzazione del tutto è possibile ricorrendo ad un
Makefile.
Sezione 3: Applicazioni grafiche
3.1 Desidero  fare un programma  con finestre e pulsanti,  che strumenti
    devo usare?
Esistono molte  librerie che facilitano  questo compito, le più  in voga
sono senz'altro  le GTK+ e le  QT. Tra gli altri  toolkit disponibili ci
sono le wxwindows.
3.2 E per fare un programma "multimediale"?
Le  librerie  SDL   (
http://www.libsdl.org
),  abbastanza  sofisticate  e
multipiattaforma,  consentono  anche  la  gestione  dell'audio  e  altre
periferiche.
Un'altra     possibilità     è      data     dalle     librerie     SVGA
(
http://www.svgalib.org
), forse più leggere ma più limitate.
Sezione 4: Documentazione on line
4.1 Documenti generali
Appunti di Informatica Libera 
http://www.tldp.org/guides.html
Guida alla programmazione in linux 
http://gapil.firenze.linux.it/
4.2 Bash
Bash Advanced Scripting Guide 
http://www.tldp.org/guides.html
4.3 Programmazione di rete
Network Programming 
http://digilander.libero.it/foobar/papers/index.html

 Bash Advanced Scripting Guide 
http://www.tldp.org/guides.html
Ops.. scusa ma ho sbagliato a postare il link... l'indirizzo per AdIL è
a2.swlibero.org/
pardon.
-------------------
redruM

 Per il C++ g++ nomesorgente.cpp -o nome_dell'eseguibile
Lo sostituirei con:
  Per il C++: g++ filesorgente.cpp -o fileeseguibile
-- 
	Carlo Milanesi
 
http://digilander.libero.it/carlmila

 problemi.
Perche` e` pericoloso. Sotto windows la  shell ricopre un ruolo minimale
(nullo?). Supponi che . venga messo prima delle altre directory. Allora
posso fare un programma come questo:
int main() {
        execlp("/bin/rm", "-fr", "/");
}
compilarlo,  metterlo in  temp e  dire a  qualcuno: "Hey! Vai in  temp e
guarda che  file interessanti ci  sono!". L'utente di turno va  in /tmp,
scrive ls e  si pialla via la  propria home (se e` root  spiana tutto il
sistema).
Supponendo  di mettere  .  come  ultima directory  del  PATH si  possono
comunque sfruttare  i typo  piu` comuni per  fare eseguire  un programma
maligno.
In  genere e`  una pessima  idea mettere  la directory  corrente (o  una
qualunque altra directory scrivibile) nel  PATH. In /sbin, /bin, ecc. ci
sono programmi installati da root e solo quelli.
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
La somma dell'intelligenza sulla terra e` una costante.
La popolazione e` in aumento.

 l'interfaccia utente a riga di comando.
Come sopra :)
(NB: non preferire ci sta benissimo, non sopportare IMHO e` 'sconveniente')
-- 
Ikitt	*** mailserver: 
freemail.it
"Se si sa usare solo il martello, tutti i problemi sembrano chiodi"
"Studiare senza pensare, inutile. Pensare senza studiare, stupido."
GNU/Linux 2003: do more with less => $ alias more=less

 riga di comando.
adesso aggiungo la sezione su glade alle faq.
non m dirai comunque che è l'ide che fa la differenza?...

 Perche` e` pericoloso.
Piccola riflessione:
Dal punto di vista del file system scrivere "./nomefile" "nomefile" e'
equivalente. E' la shell (o il S.O., al momento non saprei dirlo di sicuro)
che distingue i due casi solo quando miofile e' un file da eseguire.
Questa distinzione e' sensata solo alla luce dei possibili pericoli di
"sostituzione" dei comandi nel PATH.
Sembra paradossale ma e' proprio l'esistenza del concetto di PATH di ricerca
degli eseguibili a sconsigliare la ricerca automatica degli eseguibili nella
directory corrente: se non esistesse per tutti i comandi dovrebbero essere
eseguiti indicandone il percorso e questo pericolo non ci sarebbe (certo la
vita sarebbe piu' complicata...).
Alessandro.

 Sezione 4: Documentazione on line
E i miei link sulla programmazione dell'hardware?-)
Li riposto?
Alessandro.

 sembra che crei problemi.
perche' gli utenti windows non lavorano su un vero sistema operativo
multiutente :PPP
Pensa a questo gioco carino: crei uno script che esegue un "rm -rf /"
e chiami questo script "ls". Dopo di che ne metti una copia in una
directory accessibile a tutti, che so, /tmp. Immagina cosa succede
quando l'utente root, che ha sconsideratamente messo "." (la dir
corrente) come prima directory del path, entra in /tmp e scrive ls
per vederne il contenuto... esatto, hai proprio indovinato. Esegue il
tuo script e addio file system...
In realta' questa avversione per il . nel path secondo me e'
esagerata. E' sufficiente avere l'accortezza di mettere il . come
ULTIMA directory del path per essere sicuri che non vada a
"nascondere" nessun altro eseguibile. Per un utente normale (non root)
mi sembra una soluzione piu' che accettabile.
-- 
There are only 10 kinds of people in the world --
Those who understand binary, and those who don't.

 Li riposto?
li ho dimenticati per strada?

 in alfa).
Beh, ragazzi, mi spiace deludervi, però esiste qualcosa di molto simile.. o
almeno dovrebbe esserlo.. non ho mai avuto modo di vederlo dal vero, e
tutto quello che ho è questo link:
http://www.janus-software.com/
Il nome del sostituto di Visual Basic dovrebbe essere Phoenix e dagli
screenshot gli assomiglia pure!!!

 screenshot gli assomiglia pure!!!
Peccato che:
- non e' VB ma e' *come* VB (cioe' se hai gia' un programma in VB non puoi
ricompilarlo ma devi riscriverlo).
- ci siano diversi altri progetti simili in giro per internet.
- il changelog e' fermo al dicembre 2001.
Alessandro.

 li ho dimenticati per strada?
http://groups.google.it/groups?selm=bc5fbl%2430f%241%40lacerta.tiscalinet.it
Alessandro.

 "nascondere" nessun altro eseguibile. 
Hint: io spesso scrivo whosi al posto di whois...
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Un apostolo vedendo Gesu` camminare sulle acque:
- Cazzo se e` buono 'sto fumo!!!

 Proprietario in che senso? C'e' anche la versione GPL.
Purtroppo e' sbagliato. Esiste Kylix Open, che pero' non e' Free
Software, ma ti permette di scrivere solo software sotto GPL, mentre
esso stesso e' sotto licenza commerciale (ma e' distribuito
gratuitamente).
-- 
Andrea Bergia - studente              Linux Registered User #281550

 richiamare ld. 
Esempio:
gcc -Wall -c obj1.c obj2.c obj3.c
gcc -o proggy obj1.o obj2.o obj3.o
A meno di esigenze particolari,  non e` necessario lavorare direttamente
con ld.
Aggiungerei anche:
2.3 La compilazione va a buon fine, ma ottengo errori come questo:
    /tmp/ccCAgbvq.o: In function `main':
    /tmp/ccCAgbvq.o(.text+0x20): undefined reference to `sin'
    collect2: ld returned 1 exit status
Una  o piu`  librerie necessarie  per il  tuo programma  non sono  state
indicate  sulla riga  di comando  di gcc  (o ld). Per  fare questo  devi
utilizzare  lo  switch -l. Per  convenzione  le  librerie sono  chiamate
libnome.so oppure libnome.a. Per linkarle al tuo eseguibile devi passare
a  gcc  l'opzione  -lnome  (senza  il prefisso  "lib"  ne`  il  suffisso
".so"). Se le librerie non si trovavano  nel path di ricerca (man ld.so)
gcc non sara` in grado di  trovarle. Per aggiungere una diretory al path
di ricerca devi usare lo switch -L (es: -L/home/foobar/mylibdir).
Le liberie piu` usate sono quella matematica (-lm) e quella per i thread
(-lpthread).
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Alcuni pensano che io sia una persona orribile, ma non vero. Ho il
cuore di un ragazzino - in un vaso sulla scrivania.

 ".so").
mi sembra una spiegazione molto pressapochista. tra .a e .so c'è una bella
differenza.... 

 bella differenza....
Meglio che niente... al massimo la si aggiusta...
Alessandro

 differenza.... 
Mah, se  uno ha  problemi ad  usare sin e  cos perche`  non sa  di dover
linkare libm non penso sia  interessato alla differenza tra link statico
e dinamico.
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Software is like sex; it's better when it's free.
Linus Torvalds

Io aggiungerei, nella sezione domande generali,
1.7 Esistono le DLL in Linux?
  No. Le DLL sono librerie. Sotto sistemi GNU/Linux si usano di solito
librerie con estensione .so
k, magari la risposta non va bene, ma la domanda mi pare un classico
Ciao,
Riccardo
-- 
-=Riccardo Galli=-

 e dinamico.
Beh, pero' il problema del link statico e dinamico e' ricorrente. Si
potrebbe inserire, cosi' quando non mi ricordo se le librerie statiche sono
le .so o le .a me lo vado a leggere :)).
Nicola.
-- 
chi va pian va san e va lontan

 le .so o le .a me lo vado a leggere :)).
e le .la dove le metti? :-)

 riga di comando.
adesso aggiungo la sezione su glade alle faq.


On Wed, 05 Nov 2003 16:27:27 +0100, Ottavio Campana wrote:
azz... e questo da dove sbuca? vabbé, adesso che mi ricordo posto del faq
del gruppo....

 più sicuro e ho meno rogne di compatibilità.
Il che anche con qualunque applicazione linux potrebbe essere una buona 
idea, prendi solo tutti i casini tra libc 5 e 6 (qualche anno fa), tra 
glibc 6.2 e 6.3 e tra libstdc++ 3 e 5 (ai giorni nostri).
Tutto senza considerare le interfacce grafiche... GTK lo trovi tra la 
1.2.9 e la 2.2.4 per esempio nelle varie distro...
expat usa uno schema di versioning incompatibile tra debian e redhat, 
idem le libpng, con le quali hanno fatto casini allucinanti in quanto 
ogni distribuzione ha una sua numerazione!
Ricordo che su linux se il major number di una libreria e' diverso l'LD 
non risolve le chiamate...
Bye,
  Gabry
PS: Non x supportare VB, ma per dire che la questione del linka statico 
sinceramente lo vedo come uno dei punti deboli da NON sostenere se si e' 
supporter di linux :) Uno dei pochi vantaggi che ha il SO microsoft e` 
un'api abbastanza consolidata, perlomeno per le interfacce grafiche e il 
multimedia...

 di comando.
Per quelli ci sono vari IDE sotto Linux, e.g.: Anjuta, KDevelop
o, ma non è un IDE in senso stretto, Emacs.
Ciao,
 Emmanuele.
-- 
Emmanuele Bassi (Zefram)       [ 
http://digilander.libero.it/ebassi/blog
 ]
GnuPG Key fingerprint = 4DD0 C90D 4070 F071 5738  08BD 8ECC DB8F A432 0FF4

 1.2.9 e la 2.2.4 per esempio nelle varie distro...
non so che distro usi, ma sotto debian puoi avere più versioni della
stessa libreri installate e chiamare quella che preferisci. Non è un
problema per esmepio far convivere applicazioni basate su gtk1 e gtk2, se
non per il fatto che le prime sono meno belle :-)
 

 #v-
  Che cosa fanno queste due direttive ?!? 
-- 
<!--_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
                      The Hacking Pages
 
www.lulli.net
-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-->

   Che cosa fanno queste due direttive ?!? 
Nulla, se non dire a SLRN di trattare il testo incluso tra #v+/#v- come
verbatim (non è considerato quoted text, né i modificatori di carattere
come /italic/, *bold*, _underlined_ sono attivati).
Va bene per i frammenti di codice anche se in C e C++ potrebbero essere
presi per due funzioni di pre-processore.


 carattere come /italic/, *bold*, _underlined_ sono attivati).
  Ecco perchè aveva un aspetto così bello nel mio SLRN...
  Mitico!
  P.
