[ 
https://issues.apache.org/jira/browse/IMPALA-12346?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Joe McDonnell resolved IMPALA-12346.
------------------------------------
    Resolution: Fixed

Fixed by 
[https://github.com/cloudera/native-toolchain/commit/d6223413315e638961f22f8aefd3e091e37259db]
{noformat}
commit d6223413315e638961f22f8aefd3e091e37259db
Author: Joe McDonnell <[email protected]>
Date:   Tue Aug 8 10:33:24 2023 -0700    IMPALA-12346: Explicitly disable ICU 
dependency for Boost locale build
    
    Boost locale has two implementations: one uses the ICU library
    to implement locale support and the other uses only standard C++
    libraries. Impala currently uses the non-ICU implementation.
    However, if ICU is installed before Boost is built, then Boost
    will use it by default. This leads to link errors, because the
    Impala build doesn't link in ICU.
    
    This passes the boost.locale.icu=off flag to the Boost build
    to force it to build the non-ICU implementation even if ICU
    is installed. This is important to the ARM core job.
    
    Testing:
     - Ran an ARM core job with this custom native-toolchain
     - Ran a normal toolchain build
    
    Change-Id: I9d2dcfe82bd63beb43475b4556a5d44a4329534b
    Reviewed-on: http://gerrit.cloudera.org:8080/20331
    Reviewed-by: Michael Smith <[email protected]>
    Tested-by: Joe McDonnell <[email protected]>{noformat}

> ARM core job fails with link error due to Boost locale's ICU dependency
> -----------------------------------------------------------------------
>
>                 Key: IMPALA-12346
>                 URL: https://issues.apache.org/jira/browse/IMPALA-12346
>             Project: IMPALA
>          Issue Type: Bug
>          Components: Infrastructure
>    Affects Versions: Impala 4.3.0
>            Reporter: Joe McDonnell
>            Assignee: Joe McDonnell
>            Priority: Major
>              Labels: arm
>
> On ubuntu-20.04-from-scratch-ARM, the core job fails with the following issue 
> linking impalad:
> {noformat}
> 15:37:21 
> ../../../toolchain/toolchain-packages-gcc10.4.0/boost-1.74.0-p1/lib/libboost_locale.a(icu_backend.o):icu_backend.cpp:function
>  boost::locale::impl_icu::create_localization_backend(): error: undefined 
> reference to 'icu_66::Locale::Locale()'
> 15:37:21 
> ../../../toolchain/toolchain-packages-gcc10.4.0/boost-1.74.0-p1/lib/libboost_locale.a(icu_backend.o):icu_backend.cpp:function
>  boost::locale::impl_icu::icu_localization_backend::clone() const: error: 
> undefined reference to 'icu_66::Locale::Locale()'
> 15:37:21 
> ../../../toolchain/toolchain-packages-gcc10.4.0/boost-1.74.0-p1/lib/libboost_locale.a(icu_backend.o):icu_backend.cpp:function
>  boost::locale::impl_icu::icu_localization_backend::install(std::locale 
> const&, unsigned int, unsigned int): error: undefined reference to 
> 'icu_66::Locale::createCanonical(char const*)'
> ...{noformat}
> Boost locale has an implementation that uses the ICU library and a non-ICU 
> implementation that uses only the standard C++ libraries:
> "Boost.Locale creates the natural glue between the C++ locales framework, 
> iostreams, and the powerful ICU library.
> Boost.Locale provides non-ICU based localization support as well. It is based 
> on the operating system native API or on the standard C++ library support. 
> Sacrificing some less important features, Boost.Locale becomes less powerful 
> but lighter and easier to deploy."
> The native-toolchain inside Docker used for the standard toolchain uses the 
> non-ICU version. The ARM job (not in Docker) is detecting ICU and building 
> the ICU version.
> Option 1: Disable building the ICU implementation even if ICU is present. 
> (This can be done by passing boost.locale.icu=off to boost's b2 script.)
> Option 2: Always use the ICU implementation and take an explicit dependency 
> on ICU.
> Option 1 seems easier if we don't need the extra ICU functionality.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to