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

相关推荐
ℳ₯㎕ddzོꦿ࿐8 分钟前
Docker 环境下 Paperless-ngx 中文增强版部署实战
运维·docker·容器
wdfk_prog21 分钟前
[Linux]学习笔记系列 -- [drivers][base]cpu
linux·笔记·学习
zhaoyun92721 分钟前
ubuntu linux 安装net8 net9 net 10方法
linux·ubuntu
大母猴啃编程26 分钟前
线程同步与互斥
linux
zwtahql1 小时前
ubuntu远程ssh连接
linux·ubuntu·ssh
南烟斋..1 小时前
嵌入式系统(51单片机)核心外设详解:UART通信与DS18B20温度采集
linux·运维·网络
不染尘.1 小时前
Linux的rpm与yum
linux·mysql·jdk·centos·tomcat·ssh
e***98571 小时前
跨平台虚拟机网络故障排查指南
运维·网络
重生之绝世牛码1 小时前
Linux软件安装 —— SSH免密登录
大数据·linux·运维·ssh·软件安装·免密登录