解决Windows中文用户名导致的Dart AOT编译失败问题

锦通  金牌会员 | 2023-11-6 04:56:19 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 913|帖子 913|积分 2739

Windows中文用户名导致的Dart AOT编译失败

 
问题出现时的操作系统及Dart SDK版本

系统Windows11 22H2 家庭中文版
Dart SDKversion=3.1.3 (stable) (Tue Sep 26 14:25:13 2023 +0000) on "windows_x64"
 
问题的发生过程


  • 我编写了一个简单的Dart HelloWorld程序source.dart, 像这样:
    展开代码
    1. import 'dart:io';
    2. <p>void main()<br>
    3. {<br>
    4. print('Hello World!');<br>
    5. var input = stdin.readLineSync();   //输入一串字符, 再输出<br>
    6. stdout.writeln('input: $input');<br>
    7. }<br>
    8. </p>
    复制代码
     
  • 在文件管理器中, 打开这个source.dart文件所在文件夹, 然后右键打开PowerShell窗口. 输入命令:
    1. dart compile exe source.dart
    复制代码
    这是Dart官方文档规定的生成exe文件的编译方法.
  • PowerShell窗口提示:
    1. Error: Unable to read file: C:\Users\某中文用户名\AppData\Local\Temp\83da944d\kernel.dill
    2. ../../runtime/vm/dart_api_impl.cc: 2290: error: Dart_ExitScope expects there to be a current isolate.
    3.     Did you forget to call Dart_CreateIsolateGroup or Dart_EnterIsolate?
    4. ...其他信息...
    5. Error: AOT compilation failed
    6. Generating AOT snapshot failed!
    复制代码
 
推测的原因及解决办法


  • 原因

    Dart编译过程中需要读写系统的用户临时文件夹, 而且似乎不允许这个临时文件夹路径中有中文字符.
    Windows11默认的用户临时文件夹路径是
    1. %USERPROFILE%\AppData\Local\Temp    //这里%USERPROFILE%指的是用户文件夹路径
    复制代码
     
    可以在 设置→系统→系统信息→高级系统设置→环境变量→用户变量 查看 TEMP 和 TMP 项目路径是否含中文字符.
    若是, 执行下面的步骤.
     
  • 解决办法

    把上述 TEMP 和 TMP 项目都修改为
    1. C:\UserTemp      //不一定是这个路径, 可以指定为别的路径
    复制代码
    然后保存.
     
  • 测试

    到程序源文件位置重新打开PowerShell窗口, 输入
    1. dart compile exe source.dart
    复制代码
    随后提示
    1. Generated: 当前路径\source.exe
    复制代码
    在文件管理器中可以看到预期的exe文件确实已生成. 打开此文件, 出现下面的窗口

    说明此exe文件能够正常执行.

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

锦通

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表