ID: 50140 Updated by: j...@php.net -Summary: [Patch] With default compilation option, php symbols are unresolved for nsapi Reported By: basant dot kukreja at gmail dot com -Status: Open +Status: Feedback -Bug Type: *General Issues +Bug Type: iPlanet related Operating System: Linux PHP Version: 5.3SVN-2009-11-10 (SVN) New Comment:
Check how this is fixed for Apache: sapi/apache2handler/php_apache.h and search for "visibility". I think you should do that instead of using any #pragma's. Previous Comments: ------------------------------------------------------------------------ [2009-11-10 19:20:57] basa...@php.net >From nsapi.h : #ifdef XP_UNIX #define NSAPI_PUBLIC ... It seems NSAPI_PUBLIC is expanded to empty string. -------------------------------------------- When I expanded after preprocessing nsapi.c, here is what I got : # 915 ".../php-src-5.3/sapi/nsapi/nsapi.c" int php5_init(pblock *pb, Session *sn, Request *rq) -------------------------------------- So we need to tell gcc to export the NSAPI_PUBLIC symbols. ------------------------------------------------------------------------ [2009-11-10 19:14:51] basa...@php.net The previous patch didn't resolve the problem, here is what helped resolved the issue. NSAPI_PUBLIC should have made the symbols public but it seems it doesn't. Index: sapi/nsapi/nsapi.c =================================================================== --- sapi/nsapi/nsapi.c (revision 290447) +++ sapi/nsapi/nsapi.c (working copy) @@ -67,6 +67,7 @@ * NSAPI includes */ #include "nsapi.h" +#pragma GCC visibility push(default) #define NSLS_D struct nsapi_request_context *request_context #define NSLS_DC , NSLS_D ------------------------------------------------------------------------ [2009-11-10 18:59:16] basa...@php.net Here is the snipp from gcc man page : <man gcc> " -fvisibility=default|internal|hidden|protected ... For those adding visibility support to existing code, you may find #pragma GCC visibility of use. This works by you enclosing the declarations you wish to set visibility for with (for example) #pragma GCC visibility push(hidden) and #pragma GCC visibility pop. ... " Pusing default visibility before including nsapi.h (and popping after) would help in compiling and loading php correctly with nsapi servers. Here is the patch against recent php 5.3 svn -------------------------------------------- Index: sapi/nsapi/nsapi.c =================================================================== --- sapi/nsapi/nsapi.c (revision 290447) +++ sapi/nsapi/nsapi.c (working copy) @@ -66,7 +66,9 @@ /* * NSAPI includes */ +#pragma GCC visibility push(default) #include "nsapi.h" +#pragma GCC visibility pop #define NSLS_D struct nsapi_request_context *request_context #define NSLS_DC , NSLS_D -------------------------------------------- ------------------------------------------------------------------------ [2009-11-10 18:48:30] basa...@php.net Here is how symbols looks like : $ nm .libs/libphp5.so | grep php5 004dcfb7 t php5_auth_trans 004dc661 t php5_close 004dc802 t php5_execute 004dc6d4 t php5_init Symbols are not exported by default. If we remove -fvisibility=hidden from compilation options then php compiles fine and server is able to load libphp5.so correctly. ------------------------------------------------------------------------ [2009-11-10 18:46:36] basant dot kukreja at gmail dot com Description: ------------ On Fedora 11, by default gcc uses "-fvisibility=hidden", When we compile it for Sun Web Server using following configure options, php compiles fine. './configure' '--with-nsapi=<server_path>' '--with-zlib' '--prefix=/usr/local' But when we start the web server, we get the following error : failure: CORE2253: Error running Init function load-modules: dlsym for php5_init failed (<path>/lib/libphp5.so: undefined symbol: php5_init) failure: server initialization failed Expected result: ---------------- Server should be able to load php correctly. Actual result: -------------- Sun Web Server fails to start because of unexported symbols. ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=50140&edit=1