Newsgroup: it.comp.lang.perl
Titolo: compilare script in perl si puo' ?

Salve a tutti, avrei bisogno di poter "nascondere" il codice sorgente di
alcuni script in perl, perche' sono programmi commerciali. Per questo ho
provato perl -MO=xxx ma non sono riuscito a generare direttamente un
eseguibile : o si ottiene un bytecode da far eseguire a byteperl o si
ottiene del codice c da compilare.
Entrambe le soluzioni non vanno bene, una perche' il programma deve
essere invocato con l'interprete e non direttamente, l' altra perche' si
ottiene un sorgente che, se non ci fossi io, nessun altro riuscirebbe a
compilare su macchine diverse da quella dello sviluppo. Quello che mi
servirebbe e' proprio la generazione diretta di un eseguibile standalone
a partire dal sorgente, con un unico comando ( possibilmente a prova di
utonto :). Esiste qualcosa in tal senso? ho sbagliato/tralasciato
qualcosa io?
Grazie
Ivan

Ivan,

  Per le piattaforme Microsoft esiste un /tool/ commerciale che si
chiama perl2exe, in grado di produrre eseguibili.
	Alla prossima,
		Marco

                 Marco
Ecco, mi occorrerebbe poter fare una cosa simile ma per linux/unix....
Grazie comunque!!
Ivan

 linux/unix....
  Che problema hai con la generazione di codice C? Dal tuo primo
messaggio non si capisce molto bene...
	Alla prossima,
		Marco

 Ecco, mi occorrerebbe poter fare una cosa simile ma per linux/unix....
http://www.perl.com/pub/doc/manual/html/utils/perlcc.html
Buttha
-- 
* Per rispondere in email rimuovere la prima i dall'indirizzo
* I quadri li fanno coloro che li guardano. (Marcel Duchamp)

                 Marco
Il problema e' che, cosi' a prima vista, non viene collegato qualcosa, o
mancano degli include o delle librerie. Ho provato ad aggiungere i path
manualmente con -I, ma su ogni programma, anche il piu' stupido, la
compilazione fallisce con lo stesso errore
[ivan@ivan bin]$ perlcc 
crlf2lf.pl
 -I/usr/lib/perl5/5.6.0/i386-linux
-I/usr/lib/perl5/5.6.0/i386-linux/CORE/          
--------------------------------------------------------------------------------
Compiling 
crlf2lf.pl
:
--------------------------------------------------------------------------------
Making C(crlf2lf.pl.c) for 
crlf2lf.pl
!
perl -I/usr/lib/perl5/5.6.0/i386-linux -I/usr/lib/perl5/5.6.0
-I/usr/lib/perl5/site_perl/5.6.0/i386-linux
-I/usr/lib/perl5/site_perl/5.6.0
-I/usr/lib/perl5/site_perl/5.005/i386-linux
-I/usr/lib/perl5/site_perl/5.005 -I/usr/lib/perl5/site_perl -I.
-MB::Stash -c  
crlf2lf.pl
perl -I/usr/lib/perl5/5.6.0/i386-linux -I/usr/lib/perl5/5.6.0
-I/usr/lib/perl5/site_perl/5.6.0/i386-linux
-I/usr/lib/perl5/site_perl/5.6.0
-I/usr/lib/perl5/site_perl/5.005/i386-linux
-I/usr/lib/perl5/site_perl/5.005 -I/usr/lib/perl5/site_perl -I.
-MO=C,-umain,-uattributes,-uDB 
crlf2lf.pl
Starting compile
Walking tree
Prescan
Saving methods
Bootstrap attributes 
crlf2lf.pl
Writing output
Loaded B
Loaded IO
Loaded Fcntl
crlf2lf.pl
 syntax OK
Compiling C(crlf2lf) for 
crlf2lf.pl
!
perl -I/usr/lib/perl5/5.6.0/i386-linux -I/usr/lib/perl5/5.6.0
-I/usr/lib/perl5/site_perl/5.6.0/i386-linux
-I/usr/lib/perl5/site_perl/5.6.0
-I/usr/lib/perl5/site_perl/5.005/i386-linux
-I/usr/lib/perl5/site_perl/5.005 -I/usr/lib/perl5/site_perl -I.
/tmp/crlf2lf.pl.tst
cc -fno-strict-aliasing -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
-I/usr/lib/perl5/5.6.0/i386-linux/CORE -o crlf2lf crlf2lf.pl.c  
-L/usr/local/lib
-L/usr/lib/perl5/5.6.0/i386-linux/CORE -lperl -lnsl -ldl -lm -lc -lposix
-lcrypt /usr/lib/perl5/5.6.0/i386-linux/auto/IO/IO.so
/usr/lib/perl5/5.6.0/i386-linux/auto/Fcntl/Fcntl.so 
/tmp/cc2XKa5a.o: In function `xs_init':
/tmp/cc2XKa5a.o(.text+0x3ed4): undefined reference to `boot_DynaLoader'
collect2: ld returned 1 exit status
ERROR: In compiling code for crlf2lf.pl.c !
va tutto bene fino al linking, come programmatore c direi che manca
Dynaloader.so, ma ho provato a compilarlo a parte ( e la compilazione va
a buon fine ) e ad inserirlo nel path, ma l'errore persiste.
Manca qualcosa ma non riesco a capire cosa
Grazie a chiunque mi aiuta
Ivan

 /tmp/cc2XKa5a.o(.text+0x3ed4): undefined reference to `boot_DynaLoader'
Se trascrivi il comando sopra e ci aggiungi in fondo:
 /usr/lib/perl5/5.6.0/i386-linux/auto/DynaLoader/DynaLoader.a
dovresti riuscire a linkare correttamente. Perchè non lo faccia perlcc,
non lo so (dovrei approfondire la cosa, non ho mai usato perlcc in vita
mia).
Max

 Per qualche ragione non sembra linkare DynaLoader.a.
Me lo hanno fatto tutte le installazioni del 5.6.0, non so perché :-(
Si può aggiungere il path della dir dov'è il DynaLoader a perlcc
con il -L per risolvere.
Ciao,
Valerio
--
Valerio Granato - 
val...@grana.to
FOR KeyMaster - i2000 Usenet Hierarchy
Maggiori informazioni sulla gerarchia i2000?
http://www.i2000.usenet.it
 - 
in...@i2000.usenet.it

 con il -L per risolvere.
Non mi sembra che questo risolva, perchè il problema non è che non lo
trova, ma che non cerca nemmeno di linkarlo.
Un trucchetino, invece, che ho provato con successo è specificare come
argomento di -L qualcosa del genere:
-L "/dummydir   /<perl-dir>/5.6.0/<platform>/auto/DynaLoader/DynaLoader.a"
Nota lo spazio. E' un po' un imborglio, ma il risultato è quello voluto.
In alternativa, potremmo aprire il file
  /<perl-dir>/5.6.0/<platform>/Config.pm
e aggiungere il path completo di DynaLoader.a nella riga che inizia con
"libs=". 
Max

 trova, ma che non cerca nemmeno di linkarlo.
Lo so che è strano, ma a me ha funzionato...
Non è che io sia un grande utilizzatore del perlcc, comunque. Però
quando ho visto che non funzionava con una 5.6.0 mi son messo a
provare tutte quelle che avevo sottomano.
