Bug #48795 [Ver]: Building intl 64-bit fails on OS X

From: Date: Fri, 11 Nov 2011 11:30:22 +0000
Subject: Bug #48795 [Ver]: Building intl 64-bit fails on OS X
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-165039@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=48795&edit=1

 ID:                 48795
 Updated by:         aharvey@php.net
 Reported by:        gwynne@php.net
 Summary:            Building intl 64-bit fails on OS X
 Status:             Verified
 Type:               Bug
 Package:            Compile Failure
-Operating System:   Mac OS X 10.5.8, 10.6.2
+Operating System:   OS X 10.5 & 10.6; Linux
-PHP Version:        5.3SVN-2009-11-23 (SVN)
+PHP Version:        5.3 SVN; 5.4.0RC1
 Block user comment: N
 Private report:     N

 New Comment:

tl;dr: Debian Testing and Ubuntu 11.10 have the same problem with
./configure --enable-intl --with-curl.


Effectively the same issue (required C++ linkage not occurring) is now
happening on Ubuntu 11.10 (x86-64) and Debian Testing (armv7l) with
PHP 5.3 SVN and PHP 5.4.0RC1 when compiling with both intl and curl
enabled (note that a compile with just --enable-intl succeeds). It's
notable that both these distributions feature the new Debian
"multiarch" support. Both libcurl and libicu are the normal packaged
versions.

With ./configure --enable-intl --with-curl, the result of
the compile (on the Ubuntu box, although the Debian errors are
effectively the same, just with different architecture-specific paths)
is this:

/usr/bin/ld: ext/intl/msgformat/msgformat_helpers.o: undefined reference to symbol
'__gxx_personality_v0@@CXXABI_1.3'
/usr/bin/ld: note: '__gxx_personality_v0@@CXXABI_1.3' is defined in DSO
/usr/lib/x86_64-linux-gnu/libstdc++.so.6 so try adding it to the linker command line
/usr/lib/x86_64-linux-gnu/libstdc++.so.6: could not read symbols: Invalid operation
collect2: ld returned 1 exit status
make: *** [sapi/cgi/php-cgi] Error 1

Diffing the Makefile produced by --enable-intl alone with the
"--enable-intl --with-curl" combination produces the following
(excluding rules directly related to compiling objects within
ext/curl):

@@ -75,9 +76,9 @@
 CXXFLAGS_CLEAN = -g -O2
 DEBUG_CFLAGS =
 EXTENSION_DIR = /usr/local/lib/php/extensions/no-debug-non-zts-20100525
-EXTRA_LDFLAGS =
-EXTRA_LDFLAGS_PROGRAM =
-EXTRA_LIBS = -lcrypt -lresolv -lcrypt -lrt -lrt -lm -ldl -lnsl -lxml2 -lxml2 -ldl -lm -licui18n
-licuuc -licudata -ldl -lm -licuio -lxml2 -lcrypt -lxml2 -lxml2 -lxml2 -lcrypt
+EXTRA_LDFLAGS = -L/usr/lib/x86_64-linux-gnu
+EXTRA_LDFLAGS_PROGRAM = -L/usr/lib/x86_64-linux-gnu
+EXTRA_LIBS = -lcrypt -lresolv -lcrypt -lrt -lcurl -lrt -lm -ldl -lnsl -lxml2 -lcurl -lxml2 -ldl -lm
-licui18n -licuuc -licudata -ldl -lm -licuio -lxml2 -lcrypt -lxml2 -lxml2 -lxml2 -lcrypt
 ZEND_EXTRA_LIBS =
 INCLUDES = -I/tmp/php-5.4.0RC1/ext/date/lib -I/tmp/php-5.4.0RC1/ext/ereg/regex
-I/usr/include/libxml2 -I/tmp/php-5.4.0RC1/ext/sqlite3/libsqlite -I$(top_builddir)/TSRM
-I$(top_builddir)/Zend
 EXTRA_INCLUDES =
@@ -86,13 +87,13 @@
 LFLAGS =
 LIBTOOL = $(SHELL) $(top_builddir)/libtool --silent --preserve-dup-deps
 LN_S = ln -s
-NATIVE_RPATHS =
+NATIVE_RPATHS = -Wl,-rpath,/usr/lib/x86_64-linux-gnu
 PEAR_INSTALLDIR = ${exec_prefix}/lib/php
 PHP_BUILD_DATE = 2011-11-11
-PHP_LDFLAGS =
+PHP_LDFLAGS = -L/usr/lib/x86_64-linux-gnu
 PHP_LIBS =
 OVERALL_TARGET =
-PHP_RPATHS =
+PHP_RPATHS = -R /usr/lib/x86_64-linux-gnu
 PHP_SAPI = none
 PHP_VERSION = 5.4.0RC1
 PHP_VERSION_ID = 50400

Stas's suggestion of replacing the $(BUILD_CGI) and $(BUILD_CLI)
instances of $(CC) in the generated Makefile with $(CXX) fixes the
build.

I'm not familiar enough with our build system to know how to fix this,
but we should probably do something if we can for 5.4.0 final: intl
and curl doesn't seem like it would be an unusual combination. Can we
hack the build system to use the C++ compiler preferentially if
ext/intl and ext/curl are enabled, if it can't be fixed "properly"
(whatever form that takes -- it may even up being an upstream issue)?


Previous Comments:
------------------------------------------------------------------------
[2011-11-06 19:11:09] luke at cywh dot com

Is there going to be a proper fix for this any time soon? I'm having a lot of 
trouble getting 5.3.8 to compile on OS X 10.6.8.

------------------------------------------------------------------------
[2011-07-01 16:23:27] harald dot lapp at gmail dot com

just setting the EXTRA_LIBS did not work for me, but stas tip made it work. (PHP 
5.3.6, Mac OS X 10.6.7), thanks!

------------------------------------------------------------------------
[2010-06-17 19:43:39] henrik at bearwoods dot dk

I have tried the above "quick-fixes" and have not been able to compile it yet. Im on a
Macbook Pro i5 and 10.6.4 (Maybe the i5 makes a difference)

------------------------------------------------------------------------
[2010-05-24 21:19:51] stas@php.net

Also if you change $(CC) to $(CXX) in BUILD_* vars in Makefile it seems to help too. Looks like if
you use C++ anywhere in PHP the linker should be C++ or library should be added manually. I'll
try to see if I can maybe make configure add needed magic juice there...

------------------------------------------------------------------------
[2010-04-20 19:31:52] fsb at thefeb dot org

i confirm the fix [2010-02-10 12:05 UTC] surfchen at gmail dot com: "add -lstdc++ into
EXTRA_LIBS" worked for 5.3.2 release on osx 10.6.3.

------------------------------------------------------------------------


The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at

    https://bugs.php.net/bug.php?id=48795


-- 
Edit this bug report at https://bugs.php.net/bug.php?id=48795&edit=1


Thread (27 messages)

« previous php.bugs (#165039) next »