[心得] 從Perl中撰寫C語言 (perlxs/module)
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
02/08 17:52, 1F
→
02/08 18:34, , 2F
02/08 18:34, 2F
→
02/08 18:35, , 3F
02/08 18:35, 3F
→
02/08 22:37, , 4F
02/08 22:37, 4F
→
02/08 23:22, , 5F
02/08 23:22, 5F
→
02/08 23:22, , 6F
02/08 23:22, 6F
Perl 近期熱門文章
PTT數位生活區 即時熱門文章