[
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)