我试图建立并在I386的MacBook雪豹readline的安装。

我已经提出了以下步骤:

download and extract readline-6.0.tar.gz
./configure
make everything
sudo make install

我检查的例子,他们似乎工作(例如rltest有历史的支持)。 这是输出 文件libreadline.6.0.dylib:

libreadline.6.0.dylib: Mach-O 64-bit dynamically linked shared library x86_64

我希望它是I386代替,但如果实施例工作...

然后我已经安装Readline软件包从小集团与以下内容:

cabal install readline --reinstall --configure-option=--with-readline-includes="/usr/local/include" --configure-option=--with-readline-libraries="/usr/local/lib"

这似乎工作:注意,如果没有配置选项安装失败。我已经使用了--reinstall标志力重新安装,因为我已经作出了许多试验。

这是的小集团信息的输出:

$ cabal info readline
* readline         (library)
    Synopsis:      An interface to the GNU readline library
    Latest version available: 1.0.1.0
    Latest version installed: 1.0.1.0
    Homepage:      [ Not specified ]
    Bug reports:   [ Not specified ]
    Description:   More information on readline can be found at
                   http:\/\/www.gnu.org\/directory\/readline.html.
    License:       GPL
    Maintainer:    libraries@haskell.org
    Source repo:   [ Not specified ]
    Flags:         split-base
    Dependencies:  base >=3, process -any, base <3
    Documentation: [ Not installed ]
    Cached:        Yes
    Modules:
        System.Console.Readline
        System.Console.SimpleLineEditor

好吧,看来我做。不,我不是:

GHCi, version 6.10.4: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer ... linking ... done.
Loading package base ... linking ... done.
Prelude> import System.Console.Readline
Prelude System.Console.Readline> do { readline "Prompt" }
Loading package syb ... linking ... done.
Loading package base-3.0.3.1 ... linking ... done.
Loading package filepath-1.1.0.2 ... linking ... done.
Loading package old-locale-1.0.0.1 ... linking ... done.
Loading package old-time-1.0.0.2 ... linking ... done.
Loading package unix-2.3.2.0 ... linking ... done.
Loading package directory-1.0.0.3 ... linking ... done.
Loading package process-1.0.1.1 ... linking ... done.
Loading package readline-1.0.1.0 ... linking ... <interactive>: 
/Users/macbook/.cabal/lib/readline-1.0.1.0/ghc-6.10.4/HSreadline-1.0.1.0.o: unknown symbol `_rl_basic_quote_characters'
ghc: unable to load package `readline-1.0.1.0'

Unsuprisingly,我也无法建立依赖于readline的(例如JHC)封装。

你能指出我在正确的方向?如果你需要其他的信息告诉我。

预先感谢。

有帮助吗?

解决方案

我发现下面的过程已经工作对我非常好。我希望它可以成为供日后参考。

正如我怀疑,我没有被正确编译readline时。造成这种情况的赠品是

1. file explicity told me that the library was 64 bit
2. as per rtperson advice, compiling a test example was illuminating: linking was failing for that.

查看输出:

ghc --make test_readline.hs 
Linking test_readline ...
ld: warning: in /usr/local/lib/libreadline.dylib, file is not of required architecture

因此,我设置为编译readline的与正确的体系结构,它未正确猜测。我简单地清洗的构建显示目录(make distclean命令),然后被配置通过所述标志-m32到GCC:

./configure CC="gcc -m32"

和然后重建一切(使一切)并安装它(须藤化妆安装)。 现在文件类型是令人鼓舞的:

~ 628 $ file /usr/local/lib/libreadline.dylib 
/usr/local/lib/libreadline.dylib: Mach-O dynamically linked shared library i386

和readline是否正常工作,在最后。

PS:你也可以通过手工打造的readline-1.0.1.0包,在详见“配置CABAL在Snow Leopard上安装的readline与MacPorts的” 2009年12月线程在Haskell的咖啡厅邮件列表上29

其他提示

我也一样,遇到了这一困难。事实证明,你可以编译“胖”的二进制文件,包含32位和64位版本,以规避这个问题非常漂亮。这是苹果如何分配自己的图书馆,并且他们会告诉你怎么做,在这个技术说明:

建筑通用二进制代码从“配置”的基于程序源码 http://developer.apple.com/library/mac/#technotes /tn2005/tn2137.html

在笔记是有点老了 - 它涉及到建设PPC / i386的二进制文件 - 但程序的工作对我很好,当我取代“-arch i386的-arch x86_64的”。我现在有,如,

$文件libreadline.a libreadline.a:Mach-O的通用二进制2级架构 libreadline.a(用于i386硬件架构):当前AR存档随机库 libreadline.a(对于架构x86_64的):当前AR存档随机文库

尝试与外部库的工作是在Haskell最大的痛点之一现在。社区工作就可以了,但现实情况是,大多数的Haskell程序员的学生和教授,并保持各种Unix系统之间坚固的安装程序,Mac电脑和Windows盒是那种繁重的工作,你真的需要一个企业用钱上为了行,得到的结果。 (想想太阳与Java ...)

已经觉得痛了足够的时间与GTK和OpenGL,我迅速达成的结论是,与哈斯克尔工作中最愉快的方式就是坚持到Linux。我能避免疼痛的百分之九十,如果我只是启动到Ubuntu的。

这是说,你可以,如果你尝试follwing得到一个更有意义的错误:

ghc --make TestReadline.hs

在哪里TestReadline.hs简单测试库的存在,就像你现在做GHCI:

main = do { readline "Prompt" }

也有可能要增加的readline的.cabal文件,可以帮助你出几个标志:特库,特ghci的库,和LD-选项。 这里是一些漂亮简洁的文档。您可以通过谷歌找到更好的。

如果一切都失败了,Haskell的IRC频道是非常有帮助的。

但实际上,没有任何理由为什么Haskell的标准IO不适合你?要知道,这样的事情(从186页那儿剽窃的真实世界哈斯克尔的)?

main = do 
   putStrLn "What's your name?"
   inpStr <- getLine
   putStrLn $ "Welcome, " ++ inpStr ++ "!"
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top