ASP.NET Core 打包net8.0框架在Linux CentOS7上部署问题

问题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

相关推荐
卓豪终端管理21 分钟前
如何实现补丁管理自动化?
运维·人工智能·安全·网络安全·自动化·补丁管理·补丁自动化
weixin_442643422 小时前
IP Guard vs Ping32:2025 年企业防泄密系统深度横评
服务器·网络·安全·数据安全
CZIDC2 小时前
关闭不必要的系统服务-服务器更流畅、更安全
服务器·git·安全
宿辞1923 小时前
LINUX中MYSQL的使用
android·linux·mysql
没有口袋啦4 小时前
《k8s 部署》常见报错类型1
linux·容器·kubernetes
爱上妖精的尾巴4 小时前
3-19 WPS JS宏调用工作表函数(JS 宏与工作表函数双剑合壁)学习笔记
服务器·前端·javascript·wps·js宏·jsa
CLOUD ACE4 小时前
谷歌云代理 | 金融合规上云:谷歌云PCI DSS认证环境搭建指南
服务器·网络·金融
巨龙之路4 小时前
什么是Ubuntu的Multipass
linux·运维·ubuntu
t198751284 小时前
使用zip命令在Ubuntu 20.04上进行文件夹压缩
linux·数据库·ubuntu
PleaseBrave4 小时前
记录:安装VMware、Ubuntu、ROS2
linux·ubuntu·vmware·ros2