交叉編譯php c擴充套件庫(自定義的c擴充套件)

2021-10-12 18:04:37 字數 2588 閱讀 7353

1.生成擴充套件骨架:./ext_skel --extname=xianwenjun

2.進入擴充套件目錄: cd xianwenjun

3.編寫擴充套件**: vim xianwenjun.c

4.修改擴充套件配置: vim config.m4

5.phpize編譯(檢視phpize所在路徑find / -name phpize查詢):

/usr/cneos/buildarm64/ft-yinhe-cross/host/aarch64-buildroot-linux-gnu/sysroot/usr/bin/phpize

history:檢視歷史

6.執行configure

./configure --build=x86_64-redhat-linux --host=aarch64-buildroot-linux-gnu --target=aarch64-buildroot-linux-gnu --with-php-config=/usr/cneos/buildarm64/ft-yinhe-cross/host/aarch64-buildroot-linux-gnu/sysroot/usr/bin/php-config

7.編譯: make

8.清理快取 make clean

9.安裝生成擴充套件庫: make install

檢視生成so庫的具體內容:objdump -x +so檔案路徑

2.舉例:

1.解壓並進入:

cd /root/php-5.3.28/ext

2.骨架

./ext_skel --extname=xianwenjun

3.編輯**和配置

cd xianwenjun

vim xianwenjun.c進入:

php_function(xianwenjun_helloworld)

php_fe(xianwenjun_helloworld,   null)  //函式註冊宣告

3.2:修改配置

vim config.m4

3.3.1.with

with是作為動態鏈結庫載入的

dnl php_arg_with(testext, for testext support,

dnl make sure that the comment is aligned:

dnl [ --with-testext include testext support])

修改內容為

php_arg_with(testext, for testext support,

dnl make sure that the comment is aligned:

[ --with-testext include testext support])

3.3.2.enable

表示編譯到php核心中.這個配置檔案創造了乙個--enable-testext的配置選項,而 php_arg_enable的第二個選項會在配置的時候顯示出來

dnl php_arg_enable(testext, whether to enable testext support,

dnl make sure that the comment is aligned:

dnl [ --enable-testext enable testext support])

修改內容為

php_arg_enable(testext, whether to enable testext support,

dnl make sure that the comment is aligned:

[ --enable-testext enable testext support])

4.執行configure

./configure --host=目標主機平台(如:aarch64-redhat-linux)

–build=編譯平台 --with-php-config=編譯配置(如:/usr/cneos/buildarm64/ft-yinhe-cross/host/aarch64-buildroot-linux-gnu/sysroot/usr/bin/php-config)

例子;./configure --build=x86_64-redhat-linux --host=aarch64-redhat-linux --with-php-config=/usr/cneos/buildarm64/ft-yinhe-cross/host/aarch64-buildroot-linux-gnu/sysroot/usr/bin/php-config

5.make編譯,make install 安裝生成擴充套件

make

make install

結束後生成的庫在它顯示資訊的路勁下。

遇到的坑:

由於是交叉編譯,需要將生成的庫放在其他平台使用,所以執行./configure時後面引數至關重要。所以需要檢查生成庫是否滿足要求:

objdump -x 生成庫路徑檢視庫詳細資訊

特別注意objdump -x顯示的庫檔案資訊中架構是什麼,是不是你所想的架構

自定義交叉驗證

sklearn中有cross val score 交叉驗證函式,也可以自定義此函式 from sklearn.model selection import stratifiedkfold from sklearn.base import clone skfolds stratifiedkfold n...

自定義擴充套件點

外掛程式開發久了,難免遇到需要自定義擴充套件點的需求,那麼如何自定義擴充套件點呢?以編寫乙個快捷選單項為例,說明如下 假設終端使用者可通過如下配置來擴充套件快捷選單項 com.kdevn.test.mypopupmenus label mynewaction class com.kdevn.test...

使用自定義 OpenSSL 庫編譯 nginx

編譯安裝 nginx 時,預設使用系統自帶的 openssl 庫,但其一般很老,不支援如 sdpy 等新功能。with openssl引數雖然可以指定 openssl 路徑,但只支援 openssl 的源 不支援已編譯好的 openssl。每回更新 nginx 都要重新編譯 openssl 肯定很麻...