FSI.exe在Ubuntu 10.10下不起作用

时间:2010-11-23 14:23:47

标签: f# ubuntu mono f#-interactive

更新: 试过11月CTP发布。相同的错误消息。 忘记提到这台服务器安装了Ubuntu服务器版。我在运行Desktop 10.10的Ubuntu桌面上没有此问题。 所以我怀疑它可能是一些命令行相关的库缺失。安装libreadline-dev和libreadline5后,错误消息消失了。但是,fsi卡住的问题仍然存在。

UPDATE2: 尝试了新的Mono 2.8.1。同样的FSI问题。

UPDATE3: 由于此问题非常可重现,我将其报告为fsi.exe中的一个错误。让我们看看它是怎么回事。

UPDATE4: 得到了Don Syme的快速回复。他建议的解决方案解决了这个问题。我自己创造了答案。

嗨,

我在运行Ubuntu 10.10和Mono 2.8的服务器上安装了F#2.0。 fsc.exe运行完美,我在编译fs文件时没有问题。但是,当我按如下方式运行fsi.exe时: mono /usr/local/FSharp/bin/fsi.exe

我收到了FSI提示,但错误信息不断重复

“无法安装ctrl-c处理程序 - Ctrl-C处理将无法使用。错误是:  调用目标“

引发了异常

我在这里遗漏了什么吗?

Mono 2.8是从源代码编译和安装的。

2 个答案:

答案 0 :(得分:7)

回答我自己的问题感觉很尴尬。无论如何,我会回答它,以便其他人可以从中受益。

首先,安装libreadline-dev和libreadline5,这样你就可以摆脱以下错误信息

无法安装ctrl-c处理程序 - Ctrl-C处理将无法使用。错误是:调用目标抛出了异常

如果遇到fsi.exe卡住问题,请尝试

 fsi --gui-

在我的情况下它完美无缺。

以下是我对这个问题发生的原因的理解。如果你查看代码,你会发现fsi.exe实际上引用了System.Windows.Forms,它进一步链接到Window系统。就我而言,我在没有安装X系统的服务器上运行fsi。因此,fsi卡在那里试图与不存在的X交谈。这解释了为什么我的桌面没有问题。

答案 1 :(得分:1)

在Linux下,F#从未对我有用。今天使用Mono 2.8和2010年11月的F#掉线(这与前一版本的版本号完全相同?!)我得到:

$ sudo ./install-mono.sh
In order to add FSharp.Core.dll to the Mono GAC the DLL needs to be
re-signed with the mono.snk key. The mono.snk key is available from
the 'Mono Sources'.

  http://www.mono-project.com/
  http://github.com/mono/mono/raw/master/mcs/class/mono.snk

For example, run:
  wget -O mono.snk http://github.com/mono/mono/raw/master/mcs/class/mono.snk

Then re-run this script.

An alternative to installing the DLLs in the Mono GAC is to add the
FSharp bin directory to the MONO_PATH variable. For more information
on 'How Mono Finds Assemblies' see http://www.mono-project.com/Gacutil

如果我运行它建议的wget命令,那么它就会死掉:

$ wget -O mono.snk http://github.com/mono/mono/raw/master/mcs/class/mono.snk
--2010-11-23 17:02:43--  http://github.com/mono/mono/raw/master/mcs/class/mono.snk
Resolving github.com... 207.97.227.239
Connecting to github.com|207.97.227.239|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://github.com/mono/mono/raw/master/mcs/class/mono.snk [following]
--2010-11-23 17:02:44--  https://github.com/mono/mono/raw/master/mcs/class/mono.snk
Connecting to github.com|207.97.227.239|:443... connected.
ERROR: certificate common name `*.github.com' doesn't match requested host name `github.com'.
To connect to github.com insecurely, use `--no-check-certificate'.
Unable to establish SSL connection.

现在如果我重新运行F#安装程序,我会收到一个不同的错误:

$ sudo ./install-mono.sh
-- Resigning FSharp.Core.dll with mono.snk
ERROR: Invalid number of parameters.

Usage: sn [-q | -quiet] options [parameters]

 -q | -quiet            Quiet mode (minimal display)

Help options
 -? | -h                Show this help screen about the tool
 -? | -h config         Configuration options
 -? | -h csp            Crypto Service Provider (CSP) related options
 -? | -h convert        Format convertion options
 -? | -h sn             StrongName signing options
-- Installing FSharp DLLS into the GAC
Failure adding assembly bin/FSharp.Core.dll to the cache: Strong name cannot be verified for delay-signed assembly

如果我手动将mono.snk文件从Mono 2.8目录复制到F#目录中,那么安装程序似乎可以正常工作:

$ sudo ./install-mono.sh
-- Resigning FSharp.Core.dll with mono.snk
Assembly bin/FSharp.Core.dll signed.
-- Installing FSharp DLLS into the GAC
Installed bin/FSharp.Core.dll into the gac (/usr/local/lib/mono/gac)

但是F#本身仍然无法以与之前完全相同的方式工作(只要输入输入就会挂起):

$ mono bin/fsi.exe

Microsoft (R) F# 2.0 Interactive build 2.0.0.0
Copyright (c) Microsoft Corporation. All Rights Reserved.

For help type #help;;

> 1+2*3;;

我必须使用CTRL + Z重新获得控制权,然后使用kill %1来杀死流氓进程。