* My use case :
[A] is a main program written in C++
[B] is a C++ "plugin" of [A], compiled in a shared library dynamically loaded
(dlopen-like functions)
[CX] are a libphpX.so C shared libraries compiled with "--enable-embed", where
"X" is the PHP version number (5.4, 5.3, ..., 5.0)
User calls [A] with the version of PHP he/she wants to use (ex: 5.4), [A] loads
[B] using dynamic loading (dlopen-like functions) and propagate the requested
PHP version number, and when executed, [B] tries to load this specific version
of [CX] (let's say [C5.4]) using dlopen-like functions.
* My status :
[A] is successfully compiled in program "a"
[B] is successfully compiled in shared library in file libb.so
C5.4 is successfully compiled in shared library libphp5.4.so (using ./configure
--disable-all --enable-embed && make)
* My probem :
When trying to load B from A, I got the error "unknown symbol
executor_globals_id" when calling dlopen("libb.so").
executor_globals seems to be a global variable of libphp5.so (there are several
other global variables in libphp5.so).
I can't use dlsym() because it is a dlopen() failure.
I tried refactoring my code using PHP functions (in [B]), and I have also the
same error with other global variables (such as php_embed_module, ...)
I tried to define executor_globals_id and it worked, but I felt on next global
variables error.
I want to be able not to define all PHP global variable in my [B] plugin if
possible.
* My environment :
MacOSX 10.7 64 bits
* Extra information :
[A] LDFLAGS = -flat_namespace -undefined suppress
[B] LDFLAGS = -flat_namespace -undefined suppress
dlopen() is used with "RTLD_LAZY | RTLD_GLOBAL"
Do you have an idea on how to reach my use case ?
Thanks !
Olivier Hoareau
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php