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

相关推荐
不能跑的代码不是好代码1 小时前
Linux系统常用命令中文速查表
linux·运维·服务器
石一峰6992 小时前
深入理解 Linux 中断三层机制与 1-Wire 时序锁原理
linux·运维·服务器
运维老郭2 小时前
PostgreSQL编译安装实战
运维·postgresql
无限码农3 小时前
Linux上通过cmake编译uchardet
linux·运维·服务器
运维大师4 小时前
【Linux运维极简教程】06-网络配置与管理
linux·运维
007张三丰4 小时前
软件测试专栏(15/20):REST Assured接口自动化框架实战
运维·自动化·jenkins·接口自动化·rest·assured
ACP广源盛139246256734 小时前
IX8024@ACP# 搭配此芯 AI 服务器 + 爱芯元智产品完整方案
大数据·运维·服务器·人工智能·分布式·嵌入式硬件
Hiyajo pray6 小时前
SDN 访问控制性能调优方法
服务器·网络·网络安全
探索云原生6 小时前
终于搞懂 Kueue:5 个核心对象一次讲透
linux·docker·ai·云原生·kubernetes
huainingning7 小时前
交换机通过ftp下载文件或者传输文件到ftp服务器
运维·服务器·网络