swig擴充套件php(一)

2021-05-23 09:04:43 字數 1375 閱讀 8289

同事拿c寫了個東東,php不能直接用,便問他可否寫個擴充套件,他於是提到swig,我想來慚愧,我寫過的幾個擴充套件,全部用的是php原始碼包中自帶的ext_skel,於是開始學習了下swig。

具體步驟:

1、先寫個c檔案,example.c

/* file : example.c */

#include double my_variable = 3.0;

int fact(int n)

int my_mod(int x, int y)

char *get_time()

extern double my_variable;

extern int fact(int n);

extern int my_mod(int x, int y);

extern char *get_time();

3、建立php模組

swig -php example.i

這時可以看到生成了example.php  example_wrap.c  php_example.h這三個檔案,我們vim example.php,可以看到這裡將c檔案中定義的函式都轉化成了class example的靜態函式,而且,example.php會先判斷是否已load了example.so以及根據不同的os來動態的引入該so。example_warp.c是根據要建立的擴充套件語言的不同而變化的,這裡都是php和zend的一些巨集

gcc -fpic -c example.c

生成了example.o,pic

是position-independentcode

的縮寫,因為動態鏈結庫就是為了實現位置無關,所以需要使用-fpic.

gcc `php-config --includes` -fpic -c example_wrap.c

生成了example_wrap.o.`php-config --includes`是把php依賴的標頭檔案路徑全部獲取

gcc -shared *.o -o example.so -i/usr/local/share

生成了example.so

cp example.so `php-config --extension-dir`

php的擴充套件路徑中就會有該so了

4使用該擴充套件

方法1:

vim code.php

<?php

include "example.php";

echo example::get_time();

?>

注意:現在這個example.php派上用場了。然後再php code.php,怎麼樣,看見當前時間了嗎?

方法2:

<?php

dl("example.so");

echo get_time();

SWIG 學習筆記(一)

swig 使用malloc 或者 new 來給新值分配記憶體。比如如下形式的乙個變數 char foo swig 生成如下 c mode void foo set char value c mode.when c option is used void foo set char value 如果這不...

PHP 安裝 Xdebug 擴充套件(一)

1.xdebug 簡介 xdebug 是乙個開放源 的 php 程式偵錯程式 即乙個debug工具 可以用來跟蹤,除錯和分析php程式的執行狀況。當前最新版本為 xdebug 2.5.0。2.xdebug 相關資料 官網 官網文件 docs 3.選擇合適的版本 如果官方的文件看不懂,可以繼續往下看。...

php uuid 擴充套件,PHP 擴充套件

編譯安裝時候沒有啟用下面擴充套件的,可以單獨安裝 php關鍵性擴充套件安裝 www lanmps 假設 套件 安裝目錄 www lanmps php 7.0.11 假設 php 安裝目錄 1.fileinfo 擴充套件 它應用於檔案處理的改進 進入套件解壓縮後目錄 假設套件目錄為 root lanm...