php調用靜態庫(php 靜態編譯)

本文目錄一覽:

如何在php擴展中封裝一個c++類

首先,要到了Query歸一化的C++版本源代碼。

query歸一化

引用第三方的類庫有兩種方法,一種是靜態引用,一種是動態引用,推薦使用靜態引用,因為靜態引用的情況下,會把類庫打包到php的擴展.SO文件中,這樣我們不必擔心依賴關係,帶着類庫到處跑了。

先用gcc產生.o文件,再用.o產生 最終的靜態庫 .a 文件

gcc -c -fpic queryword.cpp tradmap.cpp transcode.cpp -I . -O2

ar -r libqueryword.a queryword.o tradmap.o transcode.o

上邊圖中有產生的.o 和 .a文件

如果要動態編譯so的話,就是這個:

gcc -c -fpic -O3 queryword.cpp tradmap.cpp transcode.cpp -I .

gcc -shared queryword.o transcode.o tradmap.o -o libqueryword.so

好,現在有了libqueryword.a靜態庫,我們就可以開始做我們的擴展了。

先使用ext_skel工具生成我們框架的骨架.

./ext_skel –extname=queryword

把上邊的靜態庫放到 ./lib 目錄下。

然後修改config.m4文件。

去掉一些注釋符 dnl, 再添加兩行,最後config.m4里,有用的就是這幾行。

PHP_ARG_ENABLE(queryword, whether to enable queryword support,

Make sure that the comment is aligned:

[ –enable-queryword Enable queryword support])

if test “$PHP_QUERYWORD” != “no”; then

PHP_ADD_INCLUDE(./lib)

PHP_ADD_LIBRARY(stdc++, 1, QUERYWORD_SHARED_LIBADD)

PHP_ADD_LIBRARY_WITH_PATH(queryword, ./lib, QUERYWORD_SHARED_LIBADD)

PHP_REQUIRE_CXX()

PHP_SUBST(QUERYWORD_SHARED_LIBADD)

PHP_NEW_EXTENSION(queryword, queryword.cpp, $ext_shared)

fi

其中:

PHP_REQUIRE_CXX()用於指定這個擴展用到了C++

PHP_ADD_LIBRARY(stdc++, 1, QUERYWORD_SHARED_LIBADD) 用於將標準C++庫鏈接進入擴展

PHP_NEW_EXTENSION用於指定有哪些源文件應該被編譯,文件和文件之間用空格隔開.ext_skel默認生成的模塊框架是針對C的,我們要使用C++,那以上說明的兩個宏就是必須的.另外還要把queryword.c改名成queryword.cpp,所以PHP_NEW_EXTENSION原本包括的queryword.c也要修改.

默認生成的queryword.c(現在改名為queryword.cpp)了,已經包含了一個測試性質的導出函數,通過那個例子就可以大概明白怎麼添加自己的函數了. zend_function_entry是導出函數列表, zend_module_entry描述了模塊的信息. 不過因為是C++了,還是有幾點要修改的,否則跑不起來:

php中怎麼調用方法中的靜態變量?

static

變量是php中的變量作用範圍的一個重要特性

靜態變量僅在局部函數域中存在且只被初始化一次,當程序執行離開此作用域時,其值不會消失,會使用上次執行的結果

一個普通的變量,如

$message

在它所在的函數執行完之後就被釋放了

即第二個function執行10次,每次執行完後,$message變量被釋放,所以每次都是1

變量前加了static後,該變量在它所在的函數執行完後不會被釋放

即第一個function每次被執行後,static

$message沒有被釋放,它將被繼續累加

PHP兩個次調用靜態變量的疑問

是否為先請求A.php然後再請求B.php,這樣的話在B頁面會一直是空值

應該在一次請求中先set再get,這樣得到的值就是設置後後的新值

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/200540.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-05 20:01
下一篇 2024-12-05 20:01

相關推薦

  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • Centos7配置靜態ip

    本文將詳細闡述如何在Centos7系統中配置靜態ip。 一、查看網絡接口 在配置靜態ip之前,我們首先需要查看系統中的網絡接口,以確定我們需要配置的網卡是哪一個。 ifconfig…

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

    編程 2025-04-29
  • 使用PHP foreach遍歷有相同屬性的值

    本篇文章將介紹如何使用PHP foreach遍歷具有相同屬性的值,並給出相應的代碼示例。 一、基礎概念 在講解如何使用PHP foreach遍歷有相同屬性的值之前,我們需要先了解幾…

    編程 2025-04-28
  • PHP獲取301跳轉後的地址

    本文將為大家介紹如何使用PHP獲取301跳轉後的地址。301重定向是什麼呢?當我們訪問一個網頁A,但是它已經被遷移到了另一個地址B,此時若服務器端做了301重定向,那麼你的瀏覽器在…

    編程 2025-04-27
  • Python中通過對象不能調用類方法和靜態方法的解析

    當我們在使用Python編寫程序時,可能會遇到通過對象調用類方法和靜態方法失敗的問題,那麼這是為什麼呢?接下來,我們將從多個方面對這個問題進行詳細解析。 一、類方法和靜態方法的定義…

    編程 2025-04-27
  • Apache偽靜態配置Java

    本文將會從多個角度闡述如何在Apache中正確偽裝Java應用程序,實現URL的靜態化,提高網站的SEO優化和性能。以下是相關的配置和代碼實例。 一、RewriteEngine的配…

    編程 2025-04-27
  • PHP登錄頁面代碼實現

    本文將從多個方面詳細闡述如何使用PHP編寫一個簡單的登錄頁面。 1. PHP登錄頁面基本架構 在PHP登錄頁面中,需要包含HTML表單,用戶在表單中輸入賬號密碼等信息,提交表單後服…

    編程 2025-04-27
  • PHP與Python的比較

    本文將會對PHP與Python進行比較和對比分析,包括語法特性、優缺點等方面。幫助讀者更好地理解和使用這兩種語言。 一、語法特性 PHP語法特性: <?php // 簡單的P…

    編程 2025-04-27
  • 刪除靜態路由

    一、靜態路由的定義 路由(Routing)是指在一組互聯的計算機網絡中,根據一定的算法規則實現兩個節點之間選擇合適的路徑並且傳送數據包的過程。簡單來說,路由就是在網絡中選擇一條可達…

    編程 2025-04-25

發表回復

登錄後才能評論