a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > Perl > 正文

Perl語言全面編譯(二)

2019-11-18 17:23:48
字體:
來源:轉載
供稿:網友
第二節 Perl2EXE 編譯方法 
Perl2EXE 可以在大多數流行系統上編譯運行,但是我幾乎不用它,我認為它是“最低級”編譯。而且它也是最容易被反編譯的程序。所以我不推崇它,也不愿意用它。不過適合很多初學者。 
它的原理很簡單,知識把原來的Perl代碼放入程序中和內置的解析其共同運行,而且速度不如PerlAPP。 
Perl2EXE 同樣可以在 http://ftp.tanshuai.net/pub 和 ftp://ftp.tanshuai.net/pub/ 下載。 
標準方法: 
perl2exe <程序名> 
Perl解析器選項值設定: 
perl2exe –perloption=“<參數>“ <程序名> 
參數主要就是perl解析器的參數如:-w –X –e 等等。 
共享dll庫: 
perl2exe –small <程序名> 
如果你是多個程序編譯,那么使用這個命令,比較“劃算“,你只要把它們的共享dll庫,復制到共同的執行目錄下,即可。共享DLL庫:p2xdll.dll或者p2x560.dll。 
啟動圖形界面: 
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可執行程序也同樣無法反編譯。 
如果使用PerlCC是大家最關心的事情,在Unix-Style系統是,凡是安裝perl5.0以上版本的都可以使用PerlCC,編譯程序,但是必須有C編譯器。這個我就不必太多說了。因為這個方法不大適合初學者,一般中級程序員對Unix-Style系統應該是較為了解的。 
在Windows中,一定要安裝VC6.0(也可以是GCC,但是安裝復雜)否則仍然無法編譯,安裝VC6.0是簡單的事情,只要找到微軟VC6的光盤,安裝。 
然后,下載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節)。 
編程方式注意事項:我為什么要在開頭說OOP 等相關技術以及在本文中提及了OOP的編寫?因為PerlCC編譯有一定的局限性,如果采用OOP就可以避免這個局限性,而且會更好的發揮,眾所周知,OOP是編程發式的有一革命,你遲早都會涉及的,所以早一點總比晚一點好。我們經常編寫程序的時候用“require”命令來引用其它Perl程序文件。然而這種方式不是PerlCC不支持,PerlCC當然支持,這個命令,但是問題在于它無法被編譯入PerlCC的主程序內,也就是說主程序被編譯了,然而外部引用的這個沒有被編譯,這樣會造成很多問題,首先是暴露了原始代碼,其次它人可以隨意修改,肯能導致很多量(比如密碼)被套出,也可以修改程序運行的模式。但是這也是有點,最后一節將會詳盡講述。 

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

圖片精選

主站蜘蛛池模板: 免费a在线看| 国产极品美女在线 | 国产资源在线观看 | 日韩三级在线播放 | 综合五月激情 | 亚洲黄色一区二区三区 | 午夜国产精品视频 | 福利三区 | 欧美日韩一二 | 狠狠躁夜夜躁人人爽天天高潮 | www.国产 | 久久99蜜桃综合影院免费观看 | 亚洲网在线 | 亚洲欧美另类在线观看 | 午夜精品一区 | 日韩区 | 一区二区三区在线观看视频 | 中文字字幕一区二区三区四区五区 | a级性视频| 日韩在线色 | 欧美1区2区3区 | 激情91| 亚洲成色www久久网站瘦与人 | 午夜精品久久久久久久久久久久 | 国产一级在线 | 久久久久久久久久久蜜桃 | 国产精品美女久久久久人 | 免费一区 | 一级黄色生活视频 | 欧美h| 国产成人一区二区三区 | 亚洲国产精品久久久久秋霞不卡 | 国产成人久久精品麻豆二区 | 久久亚洲视频 | 日本a天堂| 色丁香婷婷 | 亚洲精品一区二区三区蜜桃久 | 欧美精品一区视频 | 91精品国产高清久久久久久久久 | 欧美日韩一区二区视频在线观看 | 欧美日韩一区二区视频在线观看 |