Linux 下运行.NET 6 7 8 程序遇到的两个问题

一、 /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21‘ not found 的解决办法

1. 下载 libstdc++.so.6.0.21 文件

注意区分x84_64和aarch64架构,下载对应的版本

2. 把 libstdc++.so.6.0.21 复制到 /lib64/libstdc++.so.6.0.21

3. 运行命令 export LD_PRELOAD="/lib64/libstdc++.so.6.0.21"

因为升级 libstdc++.so.6.0.xx 可能会把系统搞挂,所以在运行.NET程序前临时设置一下,用完取消设置

4. 取消设置 unset LD_PRELOAD

二、Couldn't find a valid ICU package installed on the system. Please install libicu(or icu-libs)...的解决办法

可以安装icu库,或者采用如下办法:

1. 设置工程属性

<PropertyGroup>
    <InvariantGlobalization>true</InvariantGlobalization>
</PropertyGroup>

2. appsettings.json配置文件中添加如下配置

"runtimeOptions": {
  "configProperties": {
    "System.Globalization.Invariant": true
  }
}

3. 通过设置Linux环境变量的方式解决

有时候无法设置工程属性,比如运行dotnet-counters时依然报该错误,则可以通过设置环境变量的方式
export DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1

(运行dotnet-counters时,报.NET location not found,可以设置环境变量export DOTNET_ROOT=/usr/local/dotnet)

posted @ 2023-07-20 14:23  0611163  阅读(321)  评论(0编辑  收藏  举报