PHP擴充2:config.m4中的一些基礎的宏定義和需要注意的地點

來源:互聯網
上載者:User
 

PHP_ARG_WITH或者PHP_ARG_ENABLE指定了PHP模組的工作方式,任選一種,我選擇的是WITH
PHP_REQUIRE_CXX用於指定這個擴充用到了C++
PHP_SUBST(EXTERN_NAME_SHARED_LIBADD)用於說明這個擴充編譯成動態連結程式庫的形式
PHP_ADD_LIBRARY(stdc++,"",SYSFILE_SHARED_LIBADD)用於將標準C++庫連結進入擴充
PHP_NEW_EXTENSION用於指定有哪些源檔案應該被編譯,檔案和檔案之間用空格隔開

     ext_skel預設產生的模組架構是針對C的,我們要使用C++, 那以上的3,5兩個宏就是必須的.另外還要把testext.c改名成testext.cpp,所以PHP_NEW_EXTENSION原本包括的testext.c也要修改.

  1. 在使用C++之後要注意一個小問題,那就是php_testext.h這個檔案可能被PHP的其他部分所引用到,而引用者很可能是一個.c檔案,所以不能在php_testext.h裡包含任何C++所專屬的東西.比如標準模版庫,類,或者bool類型等等.

  2. 默 認產生的testext.c(現在改名為testext.cpp)了,已經包含了一個測試性質的匯出函數,通過那個例子就可以大概明白怎麼添加自己的函數 了. zend_function_entry是匯出函數列表, zend_module_entry描述了模組的資訊. 不過因為是C++了,還是有幾點要修改的:

    1. #include "php.h" #include "php_ini.h" #include "ext/standard/info.h"

      要用extern "C" 修飾.

    2. ZEND_GET_MODULE也要用extern "C"修飾

    3. zend_module_entry就是用於描述模組資訊的類型,其實就是一個結構,其中第二項不知道是什麼含意.在Windows上,這好像是一個描述資訊,可以是一個長長的字串,但是在Linux上似乎只能是跟模組名相同.

  3. 之後的工作就是寫自己的代碼了.根據設計,提供對外的介面函數,然後寫C/C++代碼來實現.

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.