ID: 49314
User updated by: sbraun at emlix dot com
Reported By: sbraun at emlix dot com
Status: Open
Bug Type: Dynamic loading
Operating System: linux
PHP Version: 5.3.0
New Comment:
The compiler is an i686 compiler, which runs in an i486-pc-linux-gnu
chroot. So the first lines should read:
I cross compile libphp5.so in a i486-pc-linux-gnu chroot, the compiler
is an i686-pc-linux-gnu-gcc that produces code for an
i686-pc-linux-gnu
target (the compile runs as part of an embedded systems build system).
Previous Comments:
------------------------------------------------------------------------
[2009-08-20 16:13:04] sbraun at emlix dot com
Description:
------------
I cross compile libphp5.so in a i486-pc-linux-gnu chroot, the compiler
is an i486-pc-linux-gnu-gcc that produces code for an i686-pc-linux-gnu
target (the compile runs as part of an embedded systems build system).
When I load the libphp5.so into apache, it fails with:
httpd: Syntax error on line 54 of /etc/httpd/conf/httpd.conf: Cannot
load /usr/lib/apache/libphp5.so into server: /usr/lib/apache/libphp5.so:
undefined symbol: php_load_extension
php_load_extension from dl.c is guarded by #ifdef HAVE_LIBDL
objdump -x libphp5.so:
00000000 *UND* 00000000 php_load_extension
In my cross_compile situtation, the #defines for dlopen and libdl are
not set, thus HAVE_DLOPEN and HAVE_LIBDL are not in main/php_config.h,
yet my system provides dlopen() via dl.so.
Naturally, dl.so is there in my chroot and provides dlopen(), and the
configure script finds this fact when searching for dlopen()
respectively __dlopen(), yet then it throws the findings away, the
relevant lines in the configure script are:
------------------
if test "$found" = "yes"; then
ac_libs=$LIBS
LIBS="$LIBS -ldl"
if test "$cross_compiling" = yes; then
found=no
else
------------------
Later, writing the #defines HAVE_DLOPEN and HAVE_LIBDL is guarded by:
------------------
if test "$found" = "yes"; then
------------------
Reproduce code:
---------------
autoconf configure.in > configure
build_platform=i486-pc-linux-gnu
target_platform=i486-pc-linux-gnu
PKG_CONFIG_PATH=${sysroot}/usr/lib/pkgconfig \
./configure \
--prefix=${_prefix} \
--build=${build_platform} \
--host=${target_platform} \
--target=${target_platform} \
--mandir=${_mandir} \
--with-apxs2="${sysroot}${_sbindir}/apxs" \
--with-libxml-dir="${sysroot}${_prefix}" \
--with-openssl \
--without-iconv \
--disable-cli \
;
start apache with a line in httpd.conf:
LoadModule php5_module /usr/lib/apache/libphp5.so
you get the error described above
Expected result:
----------------
well, it should load and stuff
Actual result:
--------------
Instead I will provide some bugfix suggestion:
I am not so much a friend of autoconf, so i think i am maybe not the
right person to provide a patch directly. Maybe there is a reason for
the behaviour. I am going to comment the problematic line out in my
project, patch would be welcome.
# phps configure mysteriously refuses to use found libdl
# if test "$cross_compiling" = yes; then
# found=no
regards
Simon Braunschmidt
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=49314&edit=1