undefined symbol issue related to sharing a global among source files
[email protected] ("John Hayes") Thu, 13 May 2010 14:37:37 -0400
| Newsgroups | php.pecl.dev |
|---|---|
| Message-ID | <009e01caf2cb$5c68b7d0$153a2770$@com> |
Hello all,
I'm quite new to extension writing, have been through multiple tutorials,
and am now attempting to create an extension that exposes a class Graph and
a class Category. Graph needs to have a graph->getCategory() method which
returns a Category instance into the userspace. I just want to be able to do
this:
<?php $g = new Graph(); $cat = $g->getCategory(); ?>
My problem: I can get my extension to compile, but when I attempt to
instantiate either Graph or Category, I get the error:
Warning: PHP Startup: Unable to load dynamic library
'/usr/local/lib/php/extensions/getgraph.so' -
/usr/local/lib/php/extensions/getgraph.so: undefined symbol:
category_object_handlers in Unknown on line 0
Can someone tell me more about what this error means, or even better, what
I'm doing wrong? Here's more info on my code:
- Graph and the extension glue (MINIT functions, etc.) are defined in
php_getgraph.cpp + php_getgraph.h.
- Category is defined in php_category.cpp + php_category.h.
- I'm exposing the Graph and Category classes in the MINIT function:
PHP_MINIT_FUNCTION(getgraph)
{
zend_class_entry ce_cat;
INIT_CLASS_ENTRY(ce_cat, "Category", php_category_functions);
category_ce = zend_register_internal_class(&ce_cat TSRMLS_CC);
category_ce->create_object = category_create_handler;
memcpy(&category_object_handlers, zend_get_std_object_handlers(),
sizeof(zend_object_handlers));
category_object_handlers.clone_obj = NULL;
zend_class_entry ce_graph;
INIT_CLASS_ENTRY(ce_graph, "Graph", php_getgraph_functions);
graph_ce = zend_register_internal_class(&ce_graph TSRMLS_CC);
graph_ce->create_object = graph_create_handler;
memcpy(&graph_object_handlers, zend_get_std_object_handlers(),
sizeof(zend_object_handlers));
graph_object_handlers.clone_obj = NULL;
return SUCCESS;
}
- category_ce and category_object_handlers are declared in php_category.h:
extern zend_class_entry *category_ce;
extern zend_object_handlers category_object_handlers;
- both php_category.cpp and php_getgraph.h #include "php_category.h"
If I'm leaving out some important info, please let me know and I'll provide
it. Thanks very much in advance for *any* feedback you can offer.
Sincerely,
John