2007年9月28日 星期五

Perlcc - Perl 前端編譯器

Perlcc 可協助你將 perl 的 source code 編譯成 binary , c 或者 bytecode ,於是嘗試用 perlcc 來編譯:

$ perlcc -o test test.pl

將 test.pl 編譯,並輸出為 test。不過遇到的編譯錯誤:
pccl0GI5.c: In function ‘perl_init_aaaa’:
pccl0GI5.c:15664: warning: this decimal constant is unsigned only in ISO C90
/usr/bin/ld: cannot find -lperl
collect2: ld returned 1 exit status
其實只要裝一下 libperl-dev 就可以解決這個問題了。

安裝 libperl-dev:

$ sudo apt-get install libperl-dev

重新編譯即可。 :)

將 source code 編譯為 Bytecode 則可輸入 :

$ perlcc -B -o foo foo.pl

產生出來的 Bytecode 會像是這樣:
use ByteLoader 0.06;
PLBCi486-linux-gnu-thread-multi^@0.06^@^D^@^@^@^D^@^@^@^L Ya^A^@^@^@d^Me@^L h^^A^@
^@^@^@
^@^@^@A^A
^@^@^@^G^A ^D^C<84>^D^N^M^@^@^@Hello world
^@^V^A^L^@^@^@<^C^@^@^@=^M^@^@^@=^M^@^@^@=^N^@^@^@A^A^A ^@^@^@<^C^@^@^@=^K^@^@^@=^L^@^@^@A^@^A ^@^@^@8 ^@^@^@;^P^@<87> ^@^@^@<88>^L^@^@^@^@
可參閱:
Perl 語言全面編譯: 1,2,3

PS. 對了,Programming Perl 3/e 上編譯 bytecode 是寫 -b ,不過正確的應該是 -B。