Re: Unable to load DSO's when using embed sapi module

From: Date: Thu, 25 May 2006 10:47:12 +0000
Subject: Re: Unable to load DSO's when using embed sapi module
References: 1 2  Groups: php.internals 
Request: Send a blank email to internals+get-23645@lists.php.net to get a copy of this message
Thanks for the guess. But when one of these parameters is wrong, PHP engine specifically says so. My configuratin options for php build are --with-apxs2=/usr/local/apache2/bin/apxs --enable-embed=static --with-zlib --enable-debug. I use phpize with the extension. So, this automatically makes the version, debug info, zts settings info of the extension exactly similar to those of PHP. I have listed the gdb trace for successful and unsuccessful cases. I'd appreciate if someone can point what the root cause for this issue. =========================================================================== When I run a php file through CLI the gdb trace I get is listed below. It successfully loads the axis2.so Breakpoint 1, php_ini_register_extensions () at /usr/app/php-5.1.4/main/php_ini.c:552
552             zend_llist_apply(&extension_lists.engine, php_load_zend_extension_cb TSRMLS_CC);
(gdb) n
553             zend_llist_apply(&extension_lists.functions, php_load_function_extension_cb TSRMLS_CC);
(gdb) s zend_llist_apply (l=0x837ab9c, func=0x820e5d1 <php_load_function_extension_cb>) at /usr/app/php-5.1.4/Zend/zend_llist.c:190
190             for (element=l->head; element; element=element->next) {
(gdb) n
191                     func(element->data TSRMLS_CC);
(gdb) s php_load_function_extension_cb (arg=0x97a7650) at /usr/app/php-5.1.4/main/php_ini.c:232
232             zval *extension = (zval *) arg;
(gdb) n
235             php_dl(extension, MODULE_PERSISTENT, &zval, 0 TSRMLS_CC);
(gdb) p *extension $4 = {value = {lval = 159003284, dval = 1.7054524387922518e-313, str = {val = 0x97a3294 "axis2.so", len = 8}, ht = 0x97a3294, obj = {handle = 159003284, handlers = 0x8}}, refcount = 0, type = 6 '\006', is_ref = 243 ' (gdb) n
236     }
(gdb) n zend_llist_apply (l=0x837ab9c, func=0x820e5d1 <php_load_function_extension_cb>) at /usr/app/php-5.1.4/Zend/zend_llist.c:190
190             for (element=l->head; element; element=element->next) {
(gdb)
193     }
(gdb) php_ini_register_extensions () at /usr/app/php-5.1.4/main/php_ini.c:555
555             zend_llist_destroy(&extension_lists.engine);
(gdb) ================================================================================= When I use the embed sapi, it fails without being able to load axis2.so (please see the gdb trace below) Breakpoint 1, php_ini_register_extensions () at /usr/app/php-5.1.4/main/php_ini.c:552
552             zend_llist_apply(&extension_lists.engine, php_load_zend_extension_cb TSRMLS_CC);
(gdb) n
553             zend_llist_apply(&extension_lists.functions, php_load_function_extension_cb TSRMLS_CC);
(gdb) s zend_llist_apply (l=0x8344f5c, func=0x80d6f2d <php_load_function_extension_cb>) at /usr/app/php-5.1.4/Zend/zend_llist.c:190
190             for (element=l->head; element; element=element->next) {
(gdb) n
191                     func(element->data TSRMLS_CC);
(gdb) s php_load_function_extension_cb (arg=0x920e580) at /usr/app/php-5.1.4/main/php_ini.c:232
232             zval *extension = (zval *) arg;
(gdb) n
235             php_dl(extension, MODULE_PERSISTENT, &zval, 0 TSRMLS_CC);
(gdb) p *extension $3 = {value = {lval = 153133716, dval = 1.7051624436017789e-313, str = {val = 0x920a294 "axis2.so", len = 8}, ht = 0x920a294, obj = {handle = 153133716, handlers = 0x8}}, refcount = 0, type = 6 '\006', is_ref = 61 '='} (gdb) s php_dl (file=0x920e580, type=1, return_value=0xbf943d74, start_now=0) at /usr/app/php-5.1.4/ext/standard/dl.c:113
113             if (type == MODULE_PERSISTENT) {
(gdb) n
114                     extension_dir = INI_STR("extension_dir");
(gdb)
119             if (type == MODULE_TEMPORARY) {
(gdb)
122                     error_type = E_CORE_WARNING;
(gdb)
125             if (extension_dir && extension_dir[0]){
(gdb)
126                     int extension_dir_len = strlen(extension_dir);
(gdb)
128                     libpath = emalloc(extension_dir_len+Z_STRLEN_P(file)+2);
(gdb)
130                     if (IS_SLASH(extension_dir[extension_dir_len-1])) {
(gdb)
133                             sprintf(libpath, "%s%c%s", extension_dir, DEFAULT_SLASH, Z_STRVAL_P(file)); /* SAFE */
(gdb)
125             if (extension_dir && extension_dir[0]){
(gdb) p libpath $4 = 0x923bd04 "/usr/local/lib/php/ext/axis2.so" (gdb) n
140             handle = DL_LOAD(libpath);
(gdb) s
141             if (!handle) {
(gdb) n
142                     php_error_docref(NULL TSRMLS_CC, error_type, "Unable to load dynamic library '%s' - %s", libpath, GET_DL_ERROR());
thanks, -Nabeel Richard Lynch wrote:
Wild Guess: You maybe have different versions and/or different debug/zts settings on the binaries, and need to re-compile the other files in parallel... On Wed, May 24, 2006 4:58 am, Nabeel wrote:
Hi, I want to call PHP code from C. So, I compiled sapi/embed module with my PHP 5.1.4 source (--enable-embed=static). It works fine when I access standard PHP functions. When any .so file (e.g.: axis2.so) is dynamically loaded to PHP, it gives the following error when I run my test C code. (this happens with other DSO's as well.) PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/lib/php/ext/axis2.so' - /usr/local/lib/php/ext/axis2.so: undefined symbol: _zval_ptr_dtor in Unknown on line 0 axis2.so works fine thourgh cli and apache interfaces. I wonder whether I am missing something. Any help is greatly appreciated. Thanks, -Nabeel -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php


« previous php.internals (#23645) next »