2013-11-27 46 views
1

我需要編寫PHP OS的Linux(Debian的)C++擴展,C++擴展PHP

1中創建的文件的config.m4:

PHP_ARG_ENABLE (test, Enable test support) 

if test "$ PHP_TEST" = "yes"; then 
   AC_DEFINE (HAVE_TEST, 1 , [You have test extension]) 
   PHP_ADD_INCLUDE (/ home/oleg/PROJECTS/QT/lib_swl/include) 
   PHP_ADD_LIBRARY (stdc + +, 1 , TEST_SHARED_LIBADD) 
   PHP_NEW_EXTENSION (test, test.c, $ ext_shared) 
fi 

2。寫C++程序test.c的文本

# include "php.h" 
# include "zend_config.h" 

ZEND_BEGIN_ARG_INFO_EX (arginfo_readdata, 0,0,2) 
ZEND_ARG_INFO (1 , param1) 
ZEND_END_ARG_INFO(); 

PHP_FUNCTION (test); 

const zend_function_entry test_functions [] = 
{ 
    PHP_FE (test, arginfo_readdata) 
    {NULL, NULL, NULL} 
} ; 

zend_module_entry test_module_entry = { 
    STANDARD_MODULE_HEADER,// ​​# if ZEND_MODULE_API_NO> = 20010901 
    "test",// ​​name of the module 
    test_functions,// ​​specify exported functions 
    NULL,// ​​PHP_MINIT (test), Module Initialization 
    NULL,// ​​PHP_MSHUTDOWN (test), Module Shutdown 
    NULL,// ​​PHP_RINIT (test), Request Initialization 
    NULL,// ​​PHP_RSHUTDOWN (test), Request Shutdown 
    NULL,// ​​PHP_MINFO (test), Module Info (for phpinfo()) 
    "0.1" ,// version of our module 
    STANDARD_MODULE_PROPERTIES 
} ; 

ZEND_GET_MODULE (test) 

PHP_FUNCTION (test) 
{ 
zval * parameter; 

if (zend_parse_parameters (ZEND_NUM_ARGS() TSRMLS_CC, "z", & parameter) == FAILURE) 
return; 


/* Check for parameter being passed by reference */
if (! PZVAL_IS_REF (parameter)) 
{ 
zend_error (E_WARNING, "Parameter wasn't passed by reference"); 
RETURN_NULL(); 
} 

/* Make changes to the parameter */
ZVAL_LONG (parameter, 123) ; 
} 

此目錄中引起的:

phpize

./config中

使

使安裝

它運作良好....

但是... 有我需要使用一個外部靜態庫swl.a 我怎樣才能連接呢? Field LIBS = -lswl.a這不起作用。謝謝。

回答

0

我做到了!

所需在config.m4中添加此字符串:

PHP_SUBST(TEST_SHARED_LIBADD) 
PHP_ADD_LIBRARY_WITH_PATH(swl, "/home/oleg/PROJECTS/QT/lib_swl", TEST_SHARED_LIBADD) 

在這裏,我們已經添加靜態庫swl.a

什麼都...