国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Perl > 正文

Perl語言全面編譯(二)

2019-11-18 17:23:48
字體:
來源:轉載
供稿:網友
第二節 Perl2EXE 編譯方法 
Perl2EXE 可以在大多數流行系統上編譯運行,但是我幾乎不用它,我認為它是“最低級”編譯。而且它也是最容易被反編譯的程序。所以我不推崇它,也不愿意用它。不過適合很多初學者?!?br>它的原理很簡單,知識把原來的Perl代碼放入程序中和內置的解析其共同運行,而且速度不如PerlAPP。 
Perl2EXE 同樣可以在 http://ftp.tanshuai.net/pub 和 ftp://ftp.tanshuai.net/pub/ 下載?!?br>標準方法: 
perl2exe <程序名> 
Perl解析器選項值設定: 
perl2exe –perloption=“<參數>“ <程序名> 
參數主要就是perl解析器的參數如:-w –X –e 等等。 
共享dll庫: 
perl2exe –small <程序名> 
如果你是多個程序編譯,那么使用這個命令,比較“劃算“,你只要把它們的共享dll庫,復制到共同的執行目錄下,即可。共享DLL庫:p2xdll.dll或者p2x560.dll?!?br>啟動圖形界面: 
perl2exe –gui <程序名> 
和perlapp是同樣的作用。 
設置執行程序的圖標: 
perl2exe –icon=<圖標文件名> <程序名> 
設置輸出文件名: 
perl2exe <程序名> -o=<文件名> 
設置運行系統平臺: 
perl2exe –platform=<系統名稱> <程序名> 
如:Sun操作系統 perl2exe –platform=sun PRogram.pl linux操作系統 perl2exe –platform=linux program.pl 





第三節 PerlCC 編譯方法 
PerlCC是Perl的最好最優秀最強的得編譯器,而且是免費的。但是它的調試與運作是比較方“煩”人的。特別是在微軟的Windows就更令人頭疼。 
PerlCC編譯器的原理是分析Perl原代碼,然后根據標準轉換方式,轉換成C語言,當然這里的C全部采用Perl的頭文件(Header),也就是全部采用Perl的函數,即使你只有一行的 “print “hello world”;”都需要無數行的定義后才會出現這樣的效果。但是令人驚奇的是perl編譯后的這個“hello world”比C/C 的編譯后的可執行文件還要小。采用PerlCC轉換出來的C源代碼幾乎是不可讀(不可理解)的,幾乎比匯編語言還令人費解。所以這樣的程序即使被反編譯出來,它的源代碼也是會令人無法琢磨,但是這種程序根本幾乎無法反編譯,至少目前是,我相信只要Windows未被反編譯那么它編譯出來的Perl可執行程序也同樣無法反編譯?!?br>如果使用PerlCC是大家最關心的事情,在Unix-Style系統是,凡是安裝perl5.0以上版本的都可以使用PerlCC,編譯程序,但是必須有C編譯器。這個我就不必太多說了。因為這個方法不大適合初學者,一般中級程序員對Unix-Style系統應該是較為了解的?!?br>在Windows中,一定要安裝VC6.0(也可以是GCC,但是安裝復雜)否則仍然無法編譯,安裝VC6.0是簡單的事情,只要找到微軟VC6的光盤,安裝?!?br>然后,下載Perl源代碼(地址:http://ftp.tanshuai.net/pub/?。聛砗蠼忾_壓縮(Windows可以用Winzx86 -libpath:c:/perl/5.6.0/lib/MSWin32-x86/CORE c:/perl/5.6.0/lib/MSWin32-x86/CO 
RE/perl56.lib oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib com 
dlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib netapi32.lib uuid.lib 
wsock32.lib mpr.lib winmm.lib version.lib odbc32.lib odbccp32.lib msvcrt.lib 
abc.pl.c 
然后再輸入:abc.exe,如果輸出結果與abc.pl一樣,那么編譯就成功了。這個程序是使用Visual C 的CL.EXE C/C 編譯程序編譯的。在Unix-Style下是使用CC或者GCC編譯的。 
模塊編譯注意事項: 
目前PerlCC標準編譯方式可以支持大多數程序的模塊使用,但是我推薦盡量使用內部命令來完成相應任務,諸如IO::Socket模塊可以使用socket 內部函數。因為 IO::Socket是無法在PerlCC下面編譯成功的,為什么? 大家知道Perl很多的模塊是本身Perl的語言和內部函數編寫的。但是有一部分包括IO::Socket DBD DBI等這些常用的模塊,由于Perl本身內置函數限制,采用了PerlXS接口通過C 程序達到目的的。這些是通過第三方程序達到目的模塊是無法成功的編譯。所以我建議盡量使用非含有第三方程序的模塊編程。有人可能會說了,我使用了DBI DBD來操作
數據庫,難道讓我放棄嗎?不,我覺得任何事情都是有它的解決方法,Perl也一樣。Perl Bytecode將會解決這一問題(詳情情看第4節)?!?br>編程方式注意事項:我為什么要在開頭說OOP 等相關技術以及在本文中提及了OOP的編寫?因為PerlCC編譯有一定的局限性,如果采用OOP就可以避免這個局限性,而且會更好的發揮,眾所周知,OOP是編程發式的有一革命,你遲早都會涉及的,所以早一點總比晚一點好。我們經常編寫程序的時候用“require”命令來引用其它Perl程序文件。然而這種方式不是PerlCC不支持,PerlCC當然支持,這個命令,但是問題在于它無法被編譯入PerlCC的主程序內,也就是說主程序被編譯了,然而外部引用的這個沒有被編譯,這樣會造成很多問題,首先是暴露了原始代碼,其次它人可以隨意修改,肯能導致很多量(比如密碼)被套出,也可以修改程序運行的模式。但是這也是有點,最后一節將會詳盡講述。 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 嘉定区| 会昌县| 东乡县| 乐安县| 张家口市| 新巴尔虎右旗| 龙里县| 乐清市| 祁阳县| 商河县| 曲麻莱县| 萨嘎县| 崇明县| 武邑县| 鹤岗市| 宝丰县| 松滋市| 日土县| 松江区| 望谟县| 当涂县| 太仆寺旗| 龙游县| 博湖县| 武陟县| 呼玛县| 丽江市| 凌源市| 天等县| 南和县| 上犹县| 临朐县| 呼伦贝尔市| 铅山县| 霍林郭勒市| 嵊州市| 威信县| 济阳县| 雷州市| 镇赉县| 阜新|