* 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