【渲染流水线】[几何阶段]-[顶点着色]以UnityURP为例
姑焊韭资1. 前言目前国产化系统浪潮下适配鸿蒙是中国软件大势所趋.NET作为最适合开发客户端语言之一适配鸿蒙系统(HarmonyOS Next)是目前.NET开发者最关心的事情。我目前业余时间正在移植Avalonia到HarmonyOS去年在.NET Conf CN上分享过目前又取得一点进展所以本文把所有问题进行整合与大家进行分享。2. 项目状态目前.NET可以成功在HarmonyOS Next上运行。Avalonia移植项目在真机上也可以运行本文主要探讨.NET适配相关工作。3. 运行时自HarmonyOS 5.0.0(12)起禁止匿名内存申请可执行权限除系统内置的JavaScript引擎外其他虚拟机不能使用Jit功能所以无法将CoreCLR接入到鸿蒙系统中而最新版的Mono虽然支持解释执行但是由于性能问题也不会接入Mono到鸿蒙系统最终只能选择接入NativeAOT运行时。4. NativeAOT支撑鸿蒙可以接入NativeAOT的原理是鸿蒙系统兼容libc是musl的Linux系统的动态库(.so)。而.NET的RID支持linux-musl-arm64/linux-musl-x64所以理论上可以将.NET程序编译为原生的Linux动态库(.so)然后在鸿蒙的原生项目中通过dlopen以及dlsym等函数调用C#中的入口函数。而C#调用鸿蒙api则通过P/Invoke调用鸿蒙的NDK而ArkUI的TypeScript api则通过NDK中的napi调用。具体做法可以参考我正在做的Avalonia移植项目: https://github.com/OpenHarmony-NET/OpenHarmony.Avalonia5. 已知问题5.1 syscall限制 (已解决)鸿蒙系统使用了seccomp限制危险的syscall调用。标准posix下如果系统不支持某个syscall则返回错误码而seccomp非常激进如果调用了非法的sycall则直接杀掉进程。.NET的运行时初始化时会调用__NR_get_mempolicy系统调用对numa支持进行检查而这个系统调用不在鸿蒙的seccomp白名单中所以导致直接宕机。鸿蒙系统中seccomp的系统调用白名单如下https://gitee.com/openharmony/startup_init/blob/master/services/modules/seccomp/seccomp_policy/app.seccomp.policy其实安卓中也有类似的限制.NET的NativeAOT之所以能在安卓平台下运行是因为.NET中对安卓进行了特殊处理而在鸿蒙平台我们使用的是Linux平台的代码所以没有对这些系统调用进行处理。解决办法则是自行修改代码将numa的函数全部修改为空函数5.2 mmap申请虚拟内存过大已解决解决上个问题后.NET运行时初始化依然不能成功导致程序崩溃经过排查发现是GC初始化时会申请256G左右的虚拟内存导致mmap返回Out Of Memory错误。解决办法1设置环境变量“DOTNET_GCHeapHardLimit”将虚拟内存申请控制在约180G以下即可。解决办法2修改源代码将USE_REGIONS宏关掉。5.3 ICUOpenSSL等第三方库缺失已解决解决方案1从Alpine上偷包 因为Alpine的libc是musl所以理论上Alpine的库在鸿蒙上大部分都能使用。阿里云Alpine软件包镜像地址:arm64架构https://mirrors.aliyun.com/alpine/edge/main/aarch64/amd64架构https://mirrors.aliyun.com/alpine/edge/main/x86_64/解决方案2如果该库有cmake项目则可以通过鸿蒙的CMake工具链编译。5.4 ICU初始化失败已解决鸿蒙的ICU配置文件路径与默认路径不同需要调用修改环境变量API将ICU_DATA修改为/system/usr/ohos_icu且鸿蒙平台上libICU的大版本是72要使用这个版本的库。5.5 NativeAOT如何跨平台编译 (Windows平台已解决)NativeAOT众所周知不支持跨平台编译而我的方案需要发布到linux-musl平台所以无法在Windows上发布影响开发效率。解决方案在项目中引入项目https://github.com/OpenHarmony-NET/PublishAotCross5.6 无法调用Marshal.GetDelegateForFunctionPointer相关函数Marshal.GetDelegateForFunctionPointer的实现依赖动态生成汇编而HarmonyOS不支持动态生成汇编代码执行(Jit)使用该函数会导致崩溃。解决方案: 使用函数指针直接调用。6. 如何修改NativeAOT代码前文中提到部分问题的解决方案是修改源码具体操作步骤如下修改完代码执行以下命令进行编译(linux平台下需要有编译环境)./build.sh --subset clr.aot --configuration Release -arch arm64 --cross编译成功后打开目录 运行时/artifacts/bin/coreclr/linux.arm64.Release/aotsdk将这里所有的替换到自己电脑nuget的缓存目录, 例如C:\Users\用户名\.nuget\packages\runtime.linux-musl-arm64.microsoft.dotnet.ilcompiler\dotnet版本\sdk

相关新闻

【译】Visual Studio Copilot 中更智能的人工智能编辑

【译】Visual Studio Copilot 中更智能的人工智能编辑

付烤抗谱从零实现富文本编辑器系列文章 概述# 在整个编辑器系列最开始的时候,我们就提到了ContentEditable的可控性以及浏览器兼容性问题,特别是结合了React作为视图层的模式下,状态管理以及DOM的行为将变得更不可控,这里回顾一…

2026/7/3 0:19:05 阅读更多 →
【滤波跟踪】基于扩展卡尔曼滤波实现多个差分驱动轮式机器人位姿估计,融合里程计GPS和车间方位 距离 角度附matlab代码

【滤波跟踪】基于扩展卡尔曼滤波实现多个差分驱动轮式机器人位姿估计,融合里程计GPS和车间方位 距离 角度附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/7/5 10:54:07 阅读更多 →
基于11647例临床数据,法国团队首次实现基于机器学习的HCC肝移植双重死亡风险精准预测

基于11647例临床数据,法国团队首次实现基于机器学习的HCC肝移植双重死亡风险精准预测

肝癌因早期隐匿、进展迅猛等特点,一直以来素有「癌中之王」的称号。其中,肝细胞癌(HCC)作为最常见的肝癌类型,占到原发性肝癌的 70% - 90%,患者通常需要进行肝移植作为早期阶段的根治性手段,这也…

2026/5/17 8:30:59 阅读更多 →

最新新闻

终极OpenWrt网络加速方案:Turbo ACC专业配置完全指南

终极OpenWrt网络加速方案:Turbo ACC专业配置完全指南

终极OpenWrt网络加速方案:Turbo ACC专业配置完全指南 【免费下载链接】turboacc 一个适用于官方openwrt(22.03/23.05/24.10) firewall4的turboacc 项目地址: https://gitcode.com/gh_mirrors/tu/turboacc OpenWrt网络加速、路由器性能优化、Turbo ACC配置、全…

2026/7/8 6:30:53 阅读更多 →
深度解析:如何通过Turbo ACC网络加速插件彻底优化你的OpenWrt路由器性能

深度解析:如何通过Turbo ACC网络加速插件彻底优化你的OpenWrt路由器性能

深度解析:如何通过Turbo ACC网络加速插件彻底优化你的OpenWrt路由器性能 【免费下载链接】turboacc 一个适用于官方openwrt(22.03/23.05/24.10) firewall4的turboacc 项目地址: https://gitcode.com/gh_mirrors/tu/turboacc 还在为家庭网络中的游戏延迟、视频…

2026/7/8 6:30:53 阅读更多 →
千里云-算力云平台搭工作流之如何下载模型

千里云-算力云平台搭工作流之如何下载模型

如何下载模型当你在类似算力云平台部署工作流时遇到以下情况时,需要下载模型: ● 工作流提示缺少模型 ● ComfyUI / 工作流无法生成图片或视频 ● 节点已安装但模型加载失败 ● 提示 model not found / checkpoint missing 现以千里云算力平台进行…

2026/7/8 6:28:53 阅读更多 →
轴向磁通电机技术解析:从原理到电动车应用场景

轴向磁通电机技术解析:从原理到电动车应用场景

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 去年底比亚迪发布易四方概念车时,很多人还在琢磨那个“可变磁通电机”到底怎么实现磁场调节,没想到才过几个月…

2026/7/8 6:28:52 阅读更多 →
网站发布内容预检和网站巡查预警有什么积极意义?

网站发布内容预检和网站巡查预警有什么积极意义?

在全媒体传播与数字政府建设纵深推进,政企单位官方网站以及新媒体矩阵每天都在产生海量的数字资产。网络传播不仅具有“一键群发、瞬间扩散、多模态呈现”的特点,更面临着政策口径更迭、隐私监管收紧以及技术漏洞多变的复杂安全环境。在这种高密度的宣发…

2026/7/8 6:28:52 阅读更多 →
使用个人版WorkBuddy的6大企业风险与解决方案

使用个人版WorkBuddy的6大企业风险与解决方案

上周和一个做SaaS产品的CEO聊天,他说了一句话让我印象很深:“我们公司现在一半销售都在用WorkBuddy写跟进记录、生成方案,效率确实上去了。但我心里一直有个疙瘩——这些东西到底算公司的,还是算他们个人的?”在智能化…

2026/7/8 6:26:52 阅读更多 →

日新闻

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手,全日常一键长草!| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: …

2026/7/8 0:00:48 阅读更多 →
MyBatis 批量操作深度优化——从 N+1 到批处理的全路径

MyBatis 批量操作深度优化——从 N+1 到批处理的全路径

MyBatis 批量操作深度优化——从 N1 到批处理的全路径 一、从"功能正确"到"性能可接受"——MyBatis 批量操作的三段式进化 MyBatis 在日常增删改查场景中几乎是无感的——实体映射直观、SQL 控制灵活。但当数据量从千级上升到十万级、百万级,许…

2026/7/8 0:00:48 阅读更多 →
工业负载控制方案:TPD2015FN与PIC18F45K22应用解析

工业负载控制方案:TPD2015FN与PIC18F45K22应用解析

1. 工业负载控制方案概述在工业自动化、电机驱动和照明控制等高需求场景中,可靠地控制电感和电阻负载是核心挑战之一。TPD2015FN作为东芝的8通道高端智能功率开关IC,配合PIC18F45K22微控制器,能够构建一套稳定、高效的负载控制系统。这套组合…

2026/7/8 0:02:48 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/7 14:24:45 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/7 12:34:47 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/7 15:59:06 阅读更多 →

月新闻