From: SourceForge.net <no...@so...> - 2011-03-07 19:07:43
|
Bugs item #3166423, was opened at 2011-01-27 03:16 Message generated for change (Comment added) made by mgleahy You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=101645&aid=3166423&group_id=1645 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: php Group: None Status: Open Resolution: None Priority: 5 Private: No Submitted By: Mathieu Malaterre (malat) Assigned to: Olly Betts (olly) Summary: [php] undefined symbol: zend_error_noreturn Initial Comment: swig 2.0.0 fails to produce proper code for PHP 5.3.3 it uses symbol zend_error_noreturn instead of zend_error See also this stackoverflow question: http://stackoverflow.com/questions/2556113/swig-generated-code-fails-to-run-on-php-5-3-2-undefined-symbol-zend-error-noretu ---------------------------------------------------------------------- Comment By: Mike Leahy (mgleahy) Date: 2011-03-07 14:07 Message: Olly, yes it compiles, as do the GDAL modules I was trying this with...the problem is when these methods are invoked by the module when running in PHP...that's when the php reports "undefined symbol: zend_error_noreturn in Unknown on line 0". The expected outcome would instead be to see whatever error message that the module had supplied to the zend_error_noreturn method. wsfulton: maybe I'm blind, but I don't see a way to add attachments to this ticket... ---------------------------------------------------------------------- Comment By: William Fulton (wsfulton) Date: 2011-03-07 13:46 Message: I suggest you both post the preprocessed output of the _wrap.cxx file from the same version of SWIG and the same inputs. I suggest the php 'class' example in swig-2.0.1. All you need to do is go into this directory and run: ~/swig/swig-2.0.1/Examples/php/class$ make CFLAGS=-E > preprocessed.cxx then attach preprocessed.cxx. The differences in the way the php header files are being processed can then probably be worked out by diff'inig the files. You'll need to download the swig source though and build swig. Or if you want do this with swig-1.3.40 and download the source and use the system's version of SWIG, just modify the location that swig is being invoked from in the makefile. Be sure to give all version details. ---------------------------------------------------------------------- Comment By: Olly Betts (olly) Date: 2011-03-07 04:09 Message: But did the testcase pass (which requires it to successfully compile that wrapper)? I already know that calls to zend_error_noreturn() are generated. But they compile fine for me on all the platforms I've been able to test this on... There's some symbol aliasing trickery in the PHP header file, which is presumably causing some people problems for some reason. If we can work out what that reason is, we can (a) get PHP fixed and (b) probably enable a workaround for this issue for the cases is affects. ---------------------------------------------------------------------- Comment By: Mike Leahy (mgleahy) Date: 2011-03-07 03:27 Message: On Ubuntu 10.10, swig 1.3.40, x86_64: Downloaded and unpacked source, cd'd into the source directory, had to run ./configure first, then cd'd into Examples/test-suite/php, ran make wrapmacro.cpptest SWIG=/usr/bin/swig as you suggested. Looking in the resulting wrapmacro_wrap.cxx file, I find three occurrences of zend_error, and three occurrences of zend_error_noreturn (this is consistent with my experience compiling GDAL's modules, which produces some of both error methods). ---------------------------------------------------------------------- Comment By: Olly Betts (olly) Date: 2011-03-07 01:04 Message: Works fine with the Ubuntu package of SWIG too for me on Ubuntu 10.10 - I tested this with: cd Examples/test-suite/php make wrapmacro.cpptest SWIG=/usr/bin/swig And checking the output, the system swig is indeed being used: /usr/bin/swig -php -cppext cxx -c++ -outcurrentdir -I../../../Examples/test-suite ../../../Examples/test-suite/wrapmacro.i It seems our systems are pretty much the same, so this is very odd. Can you download the 2.0.2 source, unpack it, and try the above commands? ---------------------------------------------------------------------- Comment By: Mike Leahy (mgleahy) Date: 2011-03-06 23:35 Message: Both 10.10 and 11.04-alpha Ubuntu environments I tried this in are x86_64, but I'm using the distributions' swig packages...I haven't compiled my own. 10.10 has swig 1.3.40, and the 11.04-alpha, the swig version is 2.0.1 - so I'll have to compiled 2.0.2 myself to use the feature you mentioned. But maybe this is something that can I could rais to the Ubuntu package maintainers when they update to 2.0.2. ---------------------------------------------------------------------- Comment By: Olly Betts (olly) Date: 2011-03-06 23:18 Message: mgleahy: You didn't say what architecture you're using (uname -m). This appears to work fine for me on Ubuntu 10.10 x86_64. I tested with: cd Examples/test-suite/php make wrapmacro.cpptest That's a random testsuite example which generates calls zend_error_noreturn. If you're using SWIG 2.0.2, you can compile the generated wrapper code with -DSWIG_ZEND_ERROR_NORETURN=zend_error to work around this problem (you may get some extra compiler warnings, but it should build), but it would be useful to work out what's causing the difference (my hunch is a different architecture, since there are already some special cases in the PHP headers) so we can enable this workaround automatically, and get this bug fixed in PHP itself. ---------------------------------------------------------------------- Comment By: Mike Leahy (mgleahy) Date: 2011-03-06 17:36 Message: To answer olly's question regarding GCC, on Ubuntu 10.10 I have the following version: gcc (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5 ---------------------------------------------------------------------- Comment By: Mike Leahy (mgleahy) Date: 2011-03-06 17:31 Message: I can confirm this issue when building the PHP modules for the GDAL project (http://gdal.org) I've done this on Ubuntu 10.10, as well an alpha version of Ubuntu 11.04. Manually replacing zend_error_noreturn with zend_error then recompiling the *_wrap.cpp module seems to work fine. ---------------------------------------------------------------------- Comment By: Olly Betts (olly) Date: 2011-02-14 06:28 Message: The use of zend_error_noreturn() is intentional, and works for me on Debian squeeze, which has PHP 5.3.3 and GCC 4.4.5. Architecture is x86-64. What's the platform and GCC version where this fails for you? ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=101645&aid=3166423&group_id=1645 |