Bug #77996 [Opn->Csd]: Build fails with --enable-intl

From: Date: Thu, 29 Jul 2021 10:37:40 +0000
Subject: Bug #77996 [Opn->Csd]: Build fails with --enable-intl
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-235451@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=77996&edit=1 ID: 77996 Updated by: cmb@php.net Reported by: daniel at imhimmel dot net Summary: Build fails with --enable-intl -Status: Open +Status: Closed Type: Bug Package: *Compile Issues Operating System: macOS Mojave (10.14.4) PHP Version: 7.3.5 -Assigned To: +Assigned To: cmb Block user comment: N Private report: N New Comment: This has already been fixed[1] for PHP 7.4. [1] <https://github.com/php/php-src/commit/69190ce5c053a9bf97983932bd702137895b18df> Previous Comments: ------------------------------------------------------------------------ [2020-01-18 23:01:54] bobben at wigilius dot se I'm having the same issue trying to compile php 7.2.26 with intl (also tried 7.3.13) on MacOS 10.11.6. Php 7.1.33 with intl compiles just fine. The problem seems to be that MacOS and/or its compiler software doesn't fully support "thread_local", so the php developers need to update the TSRM/TSRM.h file and add an ifdef thing for darwin/macos that disables the use of the "thread_local" function on MacOS. Changed this code in the file TSRM/TSRM.h: #if defined(__cplusplus) && __cplusplus > 199711L # define TSRM_TLS thread_local #else # ifdef TSRM_WIN32 # define TSRM_TLS __declspec(thread) # else # define TSRM_TLS __thread # endif #endif to this: #ifdef TSRM_WIN32 # define TSRM_TLS __declspec(thread) #else # define TSRM_TLS __thread #endif so now it's the same as in 7.1.33 and now it compiles just fine! ------------------------------------------------------------------------ [2019-09-05 11:55:41] chris at cretaforce dot gr I forgot to write that I use FreeBSD. ------------------------------------------------------------------------ [2019-09-05 11:53:45] chris at cretaforce dot gr I try to create a static PHP 7.1 binary with intl support: ./configure --prefix=/home/username --enable-static --enable-cli --disable-cgi --enable-mysqlnd --with-mysql --with-mysqli --with-curl --with-zlib --enable-mbstring --enable-calendar --with-gd --with-bz2 --enable-sockets --enable-ftp --with-gettext --with-xmlrpc --with-xsl --with-pdo-mysql --enable-mbregex --enable-exif --enable-bcmath --with-mhash --enable-zip --with-mcrypt --enable-soap --with-openssl ./configure --prefix=/home/www/cretaftp/php --enable-static --enable-cli --disable-cgi --enable-mysqlnd --with-mysqli --with-curl --with-zlib --enable-mbstring --enable-calendar --with-gd --with-bz2 --enable-sockets --enable-ftp --with-gettext --with-xmlrpc --with-xsl --with-pdo-mysql --enable-mbregex --enable-exif --enable-bcmath --with-mhash --enable-zip --with-mcrypt --enable-soap --with-openssl --enable-intl --with-layout=GNU But when I run: make I get this: ld: error: undefined symbol: std::__throw_length_error(char const*) >>> referenced by stl_vector.h:1756 >>> (/usr/local/lib/gcc9/include/c++/bits/stl_vector.h:1756) >>> ext/intl/msgformat/.libs/msgformat_helpers.o:(std::vector<icu::Formattable, >>> std::allocator<icu::Formattable> >::_M_default_append(unsigned long)) ld: error: undefined symbol: std::__throw_length_error(char const*) >>> referenced by stl_vector.h:1756 >>> (/usr/local/lib/gcc9/include/c++/bits/stl_vector.h:1756) >>> ext/intl/msgformat/.libs/msgformat_helpers.o:(std::vector<icu::UnicodeString, >>> std::allocator<icu::UnicodeString> >::_M_default_append(unsigned long)) cc: error: linker command failed with exit code 1 (use -v to see invocation) *** Error code 1 Stop. If I remove --enable-intl from the ./configure command the issue doesn't exist. ------------------------------------------------------------------------ [2019-05-20 12:14:46] tmlmvp at gmail dot com Hi, I had the same problem when i build and make php(7.3.5) with zts. And my macOS version is 10.12.6. clang: warning: argument unused during compilation: '-pthread' [-Wunused-command-line-argument] Undefined symbols for architecture x86_64: "thread-local wrapper routine for _tsrm_ls_cache", referenced from: _zim_IntlDateFormatter___construct in dateformat_create.o _timezone_convert_to_datetimezone in timezone_class.o _zif_intlcal_from_date_time in calendar_methods.o _zif_intlcal_to_date_time in calendar_methods.o _php_intlgregcal_constructor_body(_zend_execute_data*, _zval_struct*, unsigned char) in gregoriancalendar_methods.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation) make: *** [sapi/cli/php] Error 1 ------------------------------------------------------------------------ [2019-05-09 09:47:50] daniel at imhimmel dot net Description: ------------ Linking libphp7.so fails with the following error: Undefined symbols for architecture x86_64: "thread-local wrapper routine for _tsrm_ls_cache", referenced from: _zim_IntlDateFormatter___construct in dateformat_create.o _timezone_convert_to_datetimezone in timezone_class.o _zif_intlcal_from_date_time in calendar_methods.o _zif_intlcal_to_date_time in calendar_methods.o _php_intlgregcal_constructor_body(_zend_execute_data*, _zval_struct*, unsigned char) in gregoriancalendar_methods.o As a workaround one may build php without intl extension (--disable-intl) and build intl as a separate extension, although I'm not sure if it might fail on some condition. For now my tests using datefmt_create and IntlDateFormatter did work just fine. ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=77996&edit=1

« previous php.bugs (#235451) next »