3

Snow Leopard を搭載した 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 から次のように readline パッケージをインストールしました。

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

動作しているように見えます: configure-options がないとインストールが失敗することに注意してください。すでに多くの試行を行っているため、 --reinstall フラグを使用して強制的に再インストールしました。

これは cabal info の出力です:

$ 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 など) をビルドすることもできません。

正しい方向に私を向けることができますか?他の情報が必要な場合は教えてください。

前もって感謝します。

4

3 に答える 3

2

私は次の手順を見つけました。これは私にとって非常にうまくいきました。今後の参考にさせていただきたいと思います。

私が疑ったように、私は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"

次に、すべてを再構築(すべて作成)してインストールしました(sudo make install)。現在、ファイルタイプは有望です。

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

そしてついにreadlineが機能しています。

PS:2009年12月29日のhaskell-cafeメーリングリストの「MacPortsを使用したSnow Leopardでのcabalインストールreadlineの設定」スレッドで詳しく説明されているように、readline-1.0.1.0パッケージを手動でビルドすることもできます。

于 2010-01-04T00:00:09.433 に答える
2

私もこの困難に遭遇しました。32 ビット バージョンと 64 ビット バージョンの両方を含む「ファット」バイナリをコンパイルできることがわかりました。これにより、この問題はうまく回避されます。これは、Apple が独自のライブラリを配布する方法であり、このテクニカル ノートでその方法を説明しています。

「構成」ベースのオープン ソース プロジェクトからのユニバーサル バイナリの構築 http://developer.apple.com/library/mac/#technotes/tn2005/tn2137.html

メモは少し古いです -- ppc/i386 バイナリのビルドに関するものです -- しかし、"-arch i386 -arch x86_64" に置き換えたところ、手順はうまくいきました。私は今、例えば、

$ file libreadline.a libreadline.a: 2 つのアーキテクチャを持つ Mach-O ユニバーサル バイナリ libreadline.a (アーキテクチャ i386 用): 現在の ar アーカイブ ランダム ライブラリ libreadline.a (アーキテクチャ x86_64 用): 現在の ar アーカイブ ランダム ライブラリ

于 2010-10-09T18:48:43.693 に答える
1

外部ライブラリを操作しようとすることは、現在 Haskell の最大の問題点の 1 つです。コミュニティはそれに取り組んでいますが、現実には、ほとんどの Haskell プログラマーは学生や教授であり、さまざまな Unice、Mac、および Windows ボックス間で堅牢なインストール手順を維持することは、お金のある企業が本当に必要な種類の単調な作業です。結果を取得するための行。(Sun と Java を考えてみてください...)

GTK と OpenGL で十分な苦痛を感じてきた私は、Haskell で作業する最も快適な方法は Linux に固執することであるという結論にすぐに達しました。Ubuntu を起動するだけで、痛みの 90% を回避できます。

とはいえ、次のことを試すと、より有益なエラーが表示される場合があります。

ghc --make TestReadline.hs

TestReadline.hs は、GHCi で行っているように、ライブラリの存在を単純にテストします。

main = do { readline "Prompt" }

readline の .cabal ファイルに追加すると役立つフラグもいくつかあります: extra-libraries、extra-ghci-libraries、ld-options。ここにいくつかのかなり簡潔なドキュメントがあります。あなたはGoogleを通してより良いものを見つけるかもしれません.

他のすべてが失敗した場合は、Haskell の IRC チャネルが非常に役立ちます。

しかし、本当に、Haskell の標準 IO が機能しない理由はありますか? ご存知のように、このようなもの ( Real World Haskellの 186 ページから引用)?

main = do 
   putStrLn "What's your name?"
   inpStr <- getLine
   putStrLn $ "Welcome, " ++ inpStr ++ "!"
于 2009-12-30T21:34:39.003 に答える