[心得] 從Perl中撰寫C語言 (perlxs/module)

看板Perl作者 (相見不如懷念)時間17年前 (2008/02/08 17:18), 編輯推噓1(105)
留言6則, 2人參與, 最新討論串1/1
LiloHuang 於 2008 春 1. 前言 稍微熟悉 Perl 的人都瞭解,Perl 本身有許多的模組都是使用C語言或者C++撰寫的。 如果今天想要提昇部份程式代碼的速度,或者因為部份代碼不想被人看到進而保護,你 就可以選擇使用 perlxs 的方式來進行撰寫的動作。 自行撰寫 perlxs 非常簡單,只要你具備 C語言或者C++的基礎即可簡單上手,但對於 新手而言,困難的是開發環境的建置,在此小弟做個簡單的介紹,分享一些經驗給大家。 2. 開發環境 a. Microsoft Visual C++ 編譯環境 使用 VC++ 6.0 版本,由於微軟後期的 VC++ 非常邪惡,使用了.manifest檔案 來控制執行 dll 時要載入的 C++ RunTime Library。因此我們如果想純粹使用 VC++ 來編譯的,那就只能透過 VC++ 6.0 才能正常編譯。 當然,還是有辦法可以讓 VC++ 7.1、8.0,甚至最新的 VS 2008 的9.0 運作, 不過方式非常繁雜,小弟認為還是別搞了吧,有興趣在詢問這個部份怎樣處理。 b. MinGW + ExtUtils::FakeConfig 編譯環境 安裝適合的 gcc 或 g++ 開發環境,如果你偏好使用 Dev C++ 當然也可以, 記得安裝後把編譯器下的 bin 目錄加到作業系統的 PATH 環境變數中方便編譯, 當然 Windows SDK 不能少,要不然會不能編譯。 3. 模組撰寫 在這邊我們選擇 b 方案 (你得先裝好 ExtUtils::FakeConfig 模組 與 nmake) 並且使用 h2xs 做一個非常簡單的範例,就來寫一個簡單的求最大值動作, 步驟如下: a. 首先透過 cmd.exe,找一個空白資料夾,輸入 h2xs -A -n TestMAX b. 此時會產生一個資料夾為 TestMAX,進入裡面有一堆檔案是我們剛剛產生的 c. 透過任何一個編輯器打開 TestMAX.xs 這個檔案,這邊開始我們嘗試撰寫 一個簡單的求最大值程式,將以下的程式碼加到 TestMAX.xs 的尾巴: int MAX(int a, int b) CODE: RETVAL = (a > b) ? a : b; OUTPUT: RETVAL d. 輸入 perl -MConfig_m Makefile.PL 來產生 Makefile e. 使用 nmake 進行編譯 nmake test 進行測試 nmake install 進行安裝 f. 撰寫一個簡單的 Perl程式: use TestMAX; print TestMAX::MAX(100, 20); g. 此時輸出應該為 100,因為他是一個比較大的值 4. 注意事項 a. 安裝 nmake 時可以 google 找一下 nmake15.exe,放置到 system32 下面,並且 更改名稱為 nmake.exe b. 缺少 Windows SDK 的請上微軟網站抓取。 c. 記得 PATH 要指定,否則無法直接使用 gcc 與 g++ 等指令。 d. 更多細節請查閱 perldoc 有關 perlxstut、perlxs、xsubpp、perlguts 等資訊。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.169.157.34 ※ 編輯: LiloHuang 來自: 218.169.157.34 (02/08 17:21)

02/08 17:52, , 1F
使用strawberry perl的話 在win32就直接tool chain都有囉
02/08 17:52, 1F

02/08 18:34, , 2F
我提供的方式是給 Active Perl 用的 XD
02/08 18:34, 2F

02/08 18:35, , 3F
有興趣的板友也可以試試 clkao 大的那個直譯器版本
02/08 18:35, 3F

02/08 22:37, , 4F

02/08 23:22, , 5F
另外..若使用Perl5.61以上版本請修改Makefile中的
02/08 23:22, 5F

02/08 23:22, , 6F
將 PERL_ARCHIVE 修改為 $(PERL_INC)\perl58.lib
02/08 23:22, 6F
文章代碼(AID): #17h1v95p (Perl)
文章代碼(AID): #17h1v95p (Perl)