Mac下以32位模式运行交互式F#及fsharpi中Windows.Forms异常咨询
嘿,咱们一步步解决你在Mac上用F#交互环境遇到的两个问题:
1. 在Mac系统中以32位模式运行交互式F#(fsharpi)
要强制fsharpi以32位模式启动,直接用系统的arch命令就行:
- 先打开终端,敲
which fsharpi找到fsharpi的安装路径(一般是/usr/local/bin/fsharpi)。 - 用32位架构启动它:
arch -i386 /usr/local/bin/fsharpi(把路径换成你实际查到的结果)。 - 验证是否成功:在fsharpi里输入
System.IntPtr.Size,返回4就说明是32位环境(32位系统的指针大小是4字节,64位是8字节)。
2. 解决fsharpi中Windows.Forms的警告与功能失效问题
问题根源
你碰到的两个警告其实是两个独立问题:
- Carbon驱动未移植到64位:Mac上的Windows.Forms依赖老旧的Carbon框架,苹果早就停止更新它了,而且根本没有64位版本,所以64位环境下Windows.Forms基本没法正常工作。
- Fontconfig警告:这是系统区域设置的UTF-8识别出了问题,不影响功能但弹出来烦得很。
具体解决办法
必须在32位模式下运行fsharpi
这是解决Windows.Forms失效的核心前提,按照第一个问题的步骤启动32位的fsharpi就好。干掉Fontconfig警告
- 临时生效:启动fsharpi前,在终端先敲这两行命令设置区域变量:
之后再启动32位fsharpi,警告就不会再弹了。export LC_ALL=en_US.UTF-8 export LANG=en_US.UTF-8 - 永久生效:把上面两行命令添加到你的shell配置文件里(比如
~/.bash_profile或者~/.zshrc,看你用的是Bash还是Zsh),保存后执行source ~/.bash_profile(对应你的配置文件名),以后每次打开终端都会自动生效。
- 临时生效:启动fsharpi前,在终端先敲这两行命令设置区域变量:
修复Windows.Forms功能
- 确保装了支持32位的Mono版本:新版Mono已经放弃支持32位Mac了,如果你用的是新Mono,建议降级到Mono 4.8.x系列(这是最后一批支持32位Mac的稳定版)。
- 在fsharpi里正确引用程序集:用Windows.Forms之前,先引用对应的dll并打开命名空间,示例代码:
这样应该能正常弹出窗口并使用基本功能了。#r "System.Windows.Forms.dll" open System.Windows.Forms let testForm = new Form(Text = "我的F#窗口") testForm.ShowDialog()
内容的提问来源于stack exchange,提问作者user6214276
相关产品推荐
相关产品推荐

