亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

PHP中調用C/C++制作的動態鏈接庫的教程

2024-05-04 23:43:46
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了PHP中調用C/C++制作的動態鏈接庫的教程,文中還簡單地提到了gcc編譯器下動態鏈接庫的制作方法,需要的朋友可以參考下
 

一般而言,php速度已經比較快,但是,對于一些較高級開發者而言,如果想要追求更快的速度,那毫無疑問可以通過自己寫c代碼,并編譯為動態鏈接庫(常為.so文件),然后php通過創建一個新的擴展(extension),并在擴展里調用該.so文件,同時對外暴露出php函數接口。
在實際使用中,只要調用該函數接口,即可使用底層更快速的c函數服務。

一、動態鏈接庫(shared)

動態鏈接庫的文件名后綴通常是 ".so"。在Windows系統中,其文件名后綴是".dll"。

程序如果是和動態連接庫進行鏈接(link),程序運行時需要能夠找到相應的動態鏈接庫文件。

使用動態鏈接庫存編譯的程序在運行時要求用戶的機器上必需也安裝了相應的動態鏈接庫文件,這些庫文件需要放置在特定的目錄,以讓程序能夠加載這些庫。

雖然這似乎沒有使用靜態鏈接庫的程序使用方便,但卻減少了程序的大小。對于那些會被很多程序使用到的庫,使用動態鏈接的好處就更加明顯了。

動態鏈接庫的制作:

gcc -shared -fPIC -o libmylib.so mylib.c  ; # 編譯成為shared library

選項-fPIC在AMD64上是必須的,其它平臺是則不是必要選項。

包含靜態鏈接庫到動態鏈接庫中

編譯動態鏈接庫時,如果需要鏈接靜態庫,并把鏈接庫的內容包含到要編譯的動態庫中,可以使用選項-Wl,--whole-archive。

例如:

gcc -shared -o libmylib.so -Wl,--whole-archive libmylib.a /  -Wl,--no-whole-archive libother.a

上面的-Wl表示傳遞給linker(鏈接器)。

二、調用動態C/C++鏈接庫
下面,本文的開發環境背景是CentOS release 6.5 。為了能夠調用c庫,我們的php 5.6.9,apache 2.4均是下載源碼并編譯的,不可直接通過yum安裝!請注意。至于php和apache的源碼編譯本文不提,只要注意在configure打開合適開關即可。

具體步驟如下:
將共享庫.so添加入系統配置中(假設共享庫名為 'libhello.so')

 cp libhello.so /usr/local/lib echo /usr/local/lib > /etc/ld.so.conf.d/local.conf /sbin/ldconfig

在php/ext目錄下創建擴展頭文件,取名為myfunctions.def
在該文件里填寫c函數聲明即可。每個函數一行。

 string hello(int a) int hello_add(int a, int b)

使用ext_skel搭建擴展骨架

./ext_skel --extname=myfunctions --proto=myfunctions.def

打開config.m4 中的enable開關

 PHP_ARG_ENABLE(myfunctions, whether to enable myfunctions support,  [ --enable-myfunctions        Include myfunctions support])

上面把擴展骨架建立好了,下面重新配置php (下面是我個人配置文件,讀者需要結合自己情況修改)

 ./buildconf --force  //生成新配置腳本 './configure' '--prefix=/usr/local/php' '--with-libdir=lib64' '--enable-fpm' '--with-fpm-user=php-fpm' '--with-fpm-group=www--enable-mysqlnd' '--with-mysql=mysqlnd' '--with-mysqli=mysqlnd' '--with-pdo-mysql=mysqlnd' '--enable-opcache' '--enable-pcntl' '--enable-mbstring' '--enable-soap' '--enable-zip' '--enable-calendar' '--enable-bcmath' '--enable-exif' '--enable-ftp' '--enable-intl' '--with-openssl' '--with-zlib' '--with-curl' '--with-gd' '--with-zlib-dir=/usr/lib' '--with-png-dir=/usr/lib' '--with-jpeg-dir=/usr/lib' '--with-gettext' '--with-mhash' '--with-ldap' '--disable-fileinfo' '--with-config-file-path=/usr/local/php/etc' '--with-apxs2=/usr/local/httpd/bin/apxs' '--enable-myfunctions' // 配置

 記?。∫欢ㄔ谀┪布由?—enable-myfunctions 。這樣子才會被編譯進php中。
當擴展編譯進去了之后,就可以開始修改擴展里的myfunctions.c文件,在里面可以添加php->c的轉接函數,在轉接函數里可以調用.so內的函數。
比如要添加一個hello_add的php函數,里面可以調用c函數add(int a, int b)
a. 添加函數聲明

PHP_FE(hello_add, NULL)

b. 添加php函數

PHP_FUNCTION(hello_add){ ... }

注意,在該函數里,如果調用了.so文件里的接口函數,那么待會在make的時候,要指定所使用的.so共享庫,該共享庫必須完成第1步中添加到系統配置的操作。
如果調用了.so文件,那么要在php/Makefile中添加

Extra_LDFLAG = -lhello //對應前面的libhello.soExtra_libs = -lhello(make clean)

每次修改完上面的c文件,都要重新make

makemake install

重啟apache服務器

httpd -k restart

在phpinfo里可以看到新擴展,可以直接在php調用新擴展內的函數。



注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品自拍偷拍| 欧美日韩成人在线观看| 在线视频国产日韩| 久久天天躁狠狠躁老女人| 国产乱人伦真实精品视频| 国产精品黄色影片导航在线观看| 亚洲色无码播放| 美女撒尿一区二区三区| 国产成人小视频在线观看| 亚洲经典中文字幕| 深夜福利日韩在线看| 91国内在线视频| 久久99国产综合精品女同| 久久综合伊人77777尤物| 日本乱人伦a精品| 精品国产一区二区三区久久久狼| 国产成人精品视频在线| 九九热r在线视频精品| 毛片精品免费在线观看| 亚洲第一精品久久忘忧草社区| 欧美大学生性色视频| 日韩欧美福利视频| 久久亚洲国产精品| 国产欧美日韩精品在线观看| 日韩国产中文字幕| 亚洲男人天堂手机在线| 国产亚洲欧美日韩一区二区| 中文字幕精品久久| 免费97视频在线精品国自产拍| 一色桃子一区二区| 日本一区二区三区四区视频| 欧美影院在线播放| 亚洲欧美中文字幕在线一区| 2019中文在线观看| 国产成人拍精品视频午夜网站| 91豆花精品一区| 国产高清在线不卡| 精品人伦一区二区三区蜜桃免费| 国产精品444| 91极品女神在线| 久久精品国产一区二区电影| 国产成人精品国内自产拍免费看| 精品中文字幕在线观看| 久久亚洲精品一区二区| 日韩欧美一区视频| 欧美一级在线播放| 一本大道久久加勒比香蕉| 久久人91精品久久久久久不卡| 国产精品日韩欧美大师| 日韩在线免费视频| 日韩麻豆第一页| 欧美黑人性视频| 最近2019中文字幕在线高清| 欧美国产日韩免费| 精品高清一区二区三区| 亚洲激情第一页| 国产美女久久久| 91精品国产91久久久久久久久| 日韩欧美成人免费视频| 国产精品电影久久久久电影网| 欧美高清在线视频观看不卡| 久久久久久久久久久免费精品| 精品国产电影一区| 这里只有精品丝袜| 7777精品视频| 欧美成人黑人xx视频免费观看| 精品国产欧美一区二区五十路| 中文字幕日韩av电影| 亚洲最大成人在线| 2019日本中文字幕| 久久精品国产一区二区电影| 中文字幕av一区二区三区谷原希美| 国产亚洲精品一区二区| 欧美成人一区在线| 日韩美女在线播放| 欧美另类第一页| 亚洲石原莉奈一区二区在线观看| 91精品国产成人www| 亚洲最大福利网站| 日本成人精品在线| 久久久久久久久久国产| 欧美在线观看一区二区三区| 久久久免费观看| 欧美一级黄色网| 啊v视频在线一区二区三区| 久久精品免费播放| 一区二区三欧美| 久久国产一区二区三区| 国产欧美日韩中文字幕在线| 福利精品视频在线| 日韩av男人的天堂| 成人a在线观看| 91中文字幕在线观看| 在线亚洲国产精品网| 都市激情亚洲色图| 欧美麻豆久久久久久中文| 欧美激情亚洲自拍| 成人国内精品久久久久一区| 亚洲精品国产电影| 欧美黑人巨大精品一区二区| 日本久久久久久久| 最近免费中文字幕视频2019| 国产成人a亚洲精品| 国内精品视频在线| 亚洲成人黄色在线观看| 最近中文字幕mv在线一区二区三区四区| 国产一区二区视频在线观看| 69久久夜色精品国产7777| 欧美日韩电影在线观看| 日韩电影免费观看在线观看| 亚洲国产成人精品久久| 精品久久久久久亚洲国产300| 国产91精品最新在线播放| 欧美性极品xxxx做受| 日韩亚洲第一页| 久久久国产视频91| 美女福利视频一区| 亚洲精品福利免费在线观看| 中文字幕在线亚洲| 91亚洲精品在线观看| 日韩中文字幕在线精品| 久久久久久久国产精品视频| 91精品国产沙发| 一二美女精品欧洲| 日韩精品一区二区视频| 91中文字幕在线| 色婷婷亚洲mv天堂mv在影片| 亚洲激情中文字幕| 亚洲精品久久久久国产| 欧美日韩国产一区二区三区| 亚洲一区二区精品| 国产精品视频色| 亚洲一区二区三区成人在线视频精品| 精品国产成人在线| 亚洲国产成人久久| 不卡中文字幕av| 一区二区三区四区在线观看视频| 国产丝袜一区二区三区免费视频| 77777少妇光屁股久久一区| 日韩免费av在线| 狠狠久久五月精品中文字幕| 欧美大片在线免费观看| 国产99视频在线观看| 国产精品流白浆视频| 国产欧美精品一区二区三区介绍| 26uuu亚洲伊人春色| 97碰碰碰免费色视频| 亚洲性无码av在线| 日本aⅴ大伊香蕉精品视频| 久久人人爽亚洲精品天堂| 国产欧美va欧美va香蕉在线| 亚洲精品视频网上网址在线观看| 97精品一区二区三区| 一区二区三区回区在观看免费视频| 亚洲色图激情小说| 欧美成人精品激情在线观看| 午夜精品福利电影| 亚洲国产91色在线| 亚洲天堂av在线免费观看| 亚洲精品美女久久久久| 久久精品视频免费播放| 亚洲欧美日本另类| 美女扒开尿口让男人操亚洲视频网站| 精品国产鲁一鲁一区二区张丽|