问题1
libstdc++.so.6版本过低。 CentOS7默认安装的gcc版本太低,达不到.net8的启动条件。
/lib64/libstdc++.so.6: version `GLIBCXX_3.4.20’ not found (required by ./IDT_net)
/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21’ not found (required by ./IDT_net)
解决方法:
进入/usr/lib64目录
cd /usr/lib64
查看运行环境/libstdc++.so.6中GLIBCXX的版本,发现确实没有GLIBCXX_3.4.20和GLIBCXX_3.4.21。
strings /usr/lib64/libstdc++.so.6 | grep GLIBC
下载更高版本的替换了就可以了。把高版本的libstdc++.so.6.0.26直接放入到/usr/lib64目录下就可以,然后更新软连接。
删除旧链接
rm -rf libstdc++.so.6
建立新连接
ln -s libstdc++.so.6.0.26 libstdc++.so.6
重新查看动态库
strings /usr/lib64/libstdc++.so.6 | grep GLIBC
问题2:
Process terminated. Couldn’t find a valid ICU package installed on the system。
ICU是一个广泛使用的开源库,用于支持Unicode和全球化软件。许多应用程序和框架,如Python的某些库、Node.js的某些模块等,都依赖于ICU库来处理国际化相关的功能。
全球化和 ICU - .NET | Microsoft Learn详细了解:.NET 全球化和 ICUhttps://learn.microsoft.com/zh-cn/dotnet/core/extensions/globalization-icu#icu-on-webassembly
解决方法:
让应用能够携带和使用其自己的 ICU 副本。
1.给项目安装NUGET包Microsoft.ICU.ICU4C.Runtime,目前最新版是72.1.0.3。
2.编辑项目csproj文件,在根节点下加入如下代码,其中的Value需要与上面安装的NUGET包版本号一致
<ItemGroup>
<RuntimeHostConfigurationOption Include="System.Globalization.AppLocalIcu" Value="72.1.0.3"/>
</ItemGroup>
3.以独立模式重新发布程序,发布后的程序中会多出几个icu相关的库文件,即可在Linux上运行了
然后会发现打包后的文件夹多出三个文件
问题3
当运行可执行文件(如 ./IDT_net)并遇到错误 “-bash: ./IDT_net: 权限不够” 时,这通常意味着该文件没有执行权限。
查看当前目录下所有文件的权限信息
ls -l IDT_net
为文件所有者添加执行权限
chmod u+x IDT_net