runtime: Cannot get symbol ucol_setMaxVariable_50 from libicui18n

After following the steps here, https://dotnet.microsoft.com/download/dotnet/thank-you/sdk-5.0.103-linux-arm64-binaries. I am getting the following exception when running:

dotnet --version

Cannot get symbol ucol_setMaxVariable_50 from libicui18n
Error: /lib64/libicui18n.so.50: undefined symbol: ucol_setMaxVariable_50
[1]    8639 abort      dotnet --version

Environment:

name -a
Linux centosraspberrypi 5.4.72-v8.1.el7 dotnet/sdk
#1 SMP PREEMPT Wed Oct 21 17:35:36 UTC 2020 aarch64 aarch64 aarch64 GNU/Linux

About this issue

  • Original URL
  • State: closed
  • Created 3 years ago
  • Reactions: 3
  • Comments: 44 (25 by maintainers)

Most upvoted comments

@tarekgh, I can’t thank you enough for your assistance and time spent in this issue 🥇.

It was very good to connect with you and I can say I learned a lot. I will try with a bigger card, that might be the problem.

Abe

I am still wondering how @tarekgh Tarek Mahmoud Sayed FTE was able to successfully build LibIcu using the same image I referenced and run NetCore with no issues. That makes me cringe 😢.

I think the only step you couldn’t do is what I mentioned in my comment https://github.com/dotnet/runtime/issues/57983#issuecomment-907548411. In my case, although took long time but was successfully completed and helped in compiling ICU v53 after that. The only difference I had is my micro SD card I used was 64 GB and I used Aluminum Heat Sink

@abarberenaCPDS please note that CentOS 7 is not supported for arm/arm64. See the support matrix here: https://github.com/dotnet/core/blob/main/release-notes/5.0/5.0-supported-os.md. arm/arm64 is only supported on Ubuntu, Debian and Alpine. The reason is that we cross build for arm/arm64 distros on x64 devices and our scripts to generate rootfs don’t support targeting redhat based distros. The distros that we target use newer libc / icu / etc. So while things might work if you upgrade the libc on CentOS 7 and build / install a newer libicu, replacing libc in a distro is a potential issue for some low level OS functionality where it is expected that libc and some other libraries match.

another idea to work around this is to use the ICU app-local feature

Include the following in your csproj:

  <ItemGroup>
    <RuntimeHostConfigurationOption Include="System.Globalization.AppLocalIcu" Value="68.2.0.6" />
    <PackageReference Include="Microsoft.ICU.ICU4C.Runtime" Version="68.2.0.6" />
  </ItemGroup>