Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Workaround: .NET Custom Runtime fails with ARM #920

Closed
normj opened this issue Sep 29, 2021 · 5 comments
Closed

Workaround: .NET Custom Runtime fails with ARM #920

normj opened this issue Sep 29, 2021 · 5 comments

Comments

@normj
Copy link
Member

normj commented Sep 29, 2021

#.NET Custom Runtime issues with libicu

Custom runtimes are typically used to run newer versions of .NET then supported in the Lambda Managed runtimes. When deploying a .NET Lambda function using Custom Runtimes, the function may fail due to issues with the libicu library. This problem manifests differently depending on the Amazon Linux version and architecture:

On Amazon Linux 2 with ARM64 architecture:
The function fails with the following error:

Cannot get symbol ucol_setMaxVariable_50 from libicui18n
Error: /lib64/libicui18n.so.50: undefined symbol: ucol_setMaxVariable_50
Aborted

This is due to .NET requiring version 53 and above of the native dependency libicu and Amazon Linux 2 has version 50. We are looking at getting the version of libicu updated in Amazon Linux 2.

On Amazon Linux 2023 (all architectures):
The function fails because libicu is not present on the system at all. https://docs.aws.amazon.com/linux/al2023/ug/amzn2-al2023-ami.html


To workaround this issue, you can include a newer version of libicu in your Lambda function that will unblock custom runtimes. To include libicu with your .NET Lambda function, include the following snippet in your csproj or fsproj file.

<ItemGroup>
    <RuntimeHostConfigurationOption Include="System.Globalization.AppLocalIcu" Value="68.2.0.6" />
    <PackageReference Include="Microsoft.ICU.ICU4C.Runtime" Version="68.2.0.6" />
</ItemGroup>
@normj normj added bug This issue is a bug. needs-triage This issue or PR still needs to be triaged. labels Sep 29, 2021
@normj normj pinned this issue Sep 29, 2021
@normj normj removed the needs-triage This issue or PR still needs to be triaged. label Sep 29, 2021
@ashishdhingra ashishdhingra changed the title .NET Custom Runtime fails with ARM Workaround: .NET Custom Runtime fails with ARM Oct 15, 2021
@ashishdhingra ashishdhingra added Announcement and removed bug This issue is a bug. labels Oct 15, 2021
@memark
Copy link

memark commented Jan 3, 2022

Even better would be with a conditional item group:

<ItemGroup Condition="'$(RuntimeIdentifier)' == 'linux-arm64'">
	<RuntimeHostConfigurationOption Include="System.Globalization.AppLocalIcu" Value="68.2.0.9"/>
	<PackageReference Include="Microsoft.ICU.ICU4C.Runtime" Version="68.2.0.9"/>
</ItemGroup>

Otherwise the application won't be runnable on other platforms, e.g. on a developer machine or any non-linux-arm64 system.

@AbbTek
Copy link

AbbTek commented Nov 19, 2022

I'm trying to update our lambda project to NET Core 7. I'm including Microsoft.ICU.ICU4C.Runtime, but I'm getting the following error.

Failed to load /var/task/libcoreclr.so, error: /lib64/libm.so.6: version `GLIBC_2.27' not found (required by /var/task/libcoreclr.so)

@martincostello
Copy link
Contributor

See #1310

@ashishdhingra
Copy link
Contributor

Closing the issue since the related issue #1310 is now closed.

@github-actions
Copy link
Contributor

⚠️COMMENT VISIBILITY WARNING⚠️

Comments on closed issues are hard for our team to see.
If you need more assistance, please either tag a team member or open a new issue that references this one.
If you wish to keep having a conversation with other community members under this issue feel free to do so.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants