代码之家  ›  专栏  ›  技术社区  ›  Francesco larlin

在i386 macbook(雪豹)上使用cabal readline软件包

  •  3
  • Francesco larlin  · 技术社区  · 15 年前

    我正在尝试用雪豹在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,但是如果这些例子有效的话。。。

    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'
    

    令人惊讶的是,我也无法构建依赖readline(如JHC)的包。

    你能给我指一下正确的方向吗?如果你需要其他信息,请告诉我。

    提前谢谢。

    3 回复  |  直到 15 年前
        1
  •  2
  •   Francesco larlin    15 年前

    我发现以下程序对我非常有效。我希望它能为将来的参考服务。

    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,它没有正确地猜测。我只是清理了构建目录(makedistclean),然后配置为将标志-m32传递给gcc:

    ./configure CC="gcc -m32"
    

    然后重建所有内容(make everything)并安装它(sudo make install)。

    ~ 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包,如2009年12月29日haskell cafe邮件列表中“在带MacPorts的雪豹上配置cabal安装readline”线程所述。

        2
  •  2
  •   Brian    15 年前

    从基于“配置”的开源项目构建通用二进制文件 http://developer.apple.com/library/mac/#technotes/tn2005/tn2137.html

    这个注释有点陈旧——它涉及到构建ppc/i386二进制文件——但是当我替换“-arch i386-arch x86_64”时,这个过程对我来说运行良好。我现在有,例如。,

    $file libreadline.a libreadline.a(用于架构i386):当前ar归档随机库 libreadline.a(用于体系结构x86_64):当前ar存档随机库

        3
  •  1
  •   rtperson    15 年前

    尝试使用外部库是Haskell目前最大的难点之一。社区正在进行这方面的工作,但现实情况是,大多数Haskell程序员都是学生和教授,在各种Unice、Mac和Windows设备之间维护健壮的安装过程是一项繁重的工作,在这种工作中,你真的需要一家有钱的公司才能取得成果(用Java思考Sun…)

    在使用GTK和OpenGL经历了足够多的痛苦之后,我很快得出结论,使用Haskell最愉快的方式就是坚持使用Linux。我可以避免百分之九十的痛苦,如果我只是启动到Ubuntu。

    ghc --make TestReadline.hs
    

    其中TestReadline.hs只是测试库的存在,就像您现在使用GHCi所做的那样:

    main = do { readline "Prompt" }
    

    您可能还想向readline的.cabal文件添加一些标志,这些标志可能会帮助您解决问题:额外的库、额外的ghci库和ld选项。 Here 这是一些非常简洁的文档。你可以通过谷歌找到更好的。

    如果所有这些都失败了,Haskell的IRC频道将非常有用。

    真实世界的Haskell )?

    main = do 
       putStrLn "What's your name?"
       inpStr <- getLine
       putStrLn $ "Welcome, " ++ inpStr ++ "!"