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

相关推荐
发仔1231 分钟前
Linux常用命令
linux
敲上瘾24 分钟前
传输层协议UDP原理
linux·c语言·网络·网络协议·udp
jiang_bluetooth1 小时前
AIC8800M40低功耗wifi在ARM-LINUX开发板上做OTA的调试经验
linux·arm开发·ota·sdio·aic8800·sdio wifi
添乱1 小时前
「Linux命令基础」文本模式系统关闭与重启
linux
添乱1 小时前
「Linux命令基础」Shell命令基础
linux
egoist20231 小时前
【Linux仓库】命令行参数与环境变量【进程·伍】
linux·运维·服务器·环境变量·命令行参数·内建命令
ζั͡山 ั͡有扶苏 ั͡✾1 小时前
CentOS/RHEL LVM 磁盘扩展完整教程
linux·运维·centos
kfepiza1 小时前
NetworkManager配置网桥(bridge)虚拟网络(vlan) 笔记250711
linux·tcp/ip·ubuntu
Fireworkitte1 小时前
Linux 中替换sed
linux·运维·服务器
gooxi_hui1 小时前
性能狂飙 Gooxi 8卡5090服务器重新定义高密度算力
运维·服务器