Created attachment 1242110 [details]
Description of problem:
Undefined symbol trying to run PHP build against GCC 6.2
Version-Release number of selected component (if applicable):
Steps to Reproduce:
1. build PHP 7.1 with devtoolset-6-toolchain installed
2. run php -v
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/intl.so' - /usr/lib64/php/modules/intl.so: undefined symbol: __cxa_throw_bad_array_new_length in Unknown on line 0
See attachement (with diff of missing symbols between 4.8 and 6.2 build), so __cxa_throw_bad_array_new_length seems to be the only missing one.
That symbol is provided in libstdc++_nonshared.a, so the above looks like a bug in how the intl.so plugin is linked. Are you sure you are linking it with g++ ... -shared ... rather than say ld -shared?
Created attachment 1242113 [details]
From above output, link uses libtool command:
/bin/sh /builddir/build/BUILD/php-7.1.1/build-cgi/libtool --silent --preserve-dup-deps --mode=link cc ...
-mode=link cc ...
that is of course a bug, if the module is written in C++, it should have been c++ or g++ instead of cc.
Great thanks for given information which helps a lot on this issue, which indeed should be fixed in PHP.
@@ -86,7 +86,7 @@ if test "$PHP_INTL" != "no"; then
- $icu_spoof_src, $ext_shared,,$ICU_INCS -Wno-write-strings -D__STDC_LIMIT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1)
+ $icu_spoof_src, $ext_shared,,$ICU_INCS -Wno-write-strings -D__STDC_LIMIT_MACROS -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1,cxx)
Going to report/fix it upstream