使用在i386的MacBook阴谋的readline包(雪豹)
-
22-09-2019 - |
题
我试图建立并在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 ++ "!"