سؤال

أحاول بناء وتثبيت ReadLine على جهاز MacBook i386 مع Snow Leopard.

لقد اتخذت الخطوات التالية:

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

لقد راجعت الأمثلة ويبدو أنها تعمل (على سبيل المثال RLTest لديه دعم للتاريخ). هذا هو إخراج File Libreadline.6.0.dylib:

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

كنت أتوقع أن يكون i386 بدلاً من ذلك ، ولكن إذا عملت الأمثلة ...

ثم قمت بتثبيت حزمة readline من Cabal مع ما يلي:

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

يبدو أنه يعمل: لاحظ أنه بدون فشل تثبيت التكوين. لقد استخدمت علم -إعادة التثبيت لإجبار إعادة التثبيت منذ أن أجريت بالفعل العديد من التجارب.

هذا هو إخراج معلومات الكابال:

$ 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'

من غير المثير للإعجاب ، أنا أيضًا غير قادر على إنشاء حزم تعتمد على القراءة (مثل JHC).

هل يمكنك أن ترشدني باتجاه اليمين؟ قل لي إذا كنت بحاجة إلى معلومات أخرى.

شكرا لك مقدما.

هل كانت مفيدة؟

المحلول

لقد وجدت الإجراء التالي الذي عمل بشكل جيد للغاية بالنسبة لي. آمل أن تخدم للرجوع إليها في المستقبل.

كما كنت أظن ، لم أكن أقوم بتجميع القراءة بشكل صحيح. كان الهبة لهذا

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 مع الهندسة المعمارية الصحيحة ، لم يكن التخمين بشكل صحيح. لقد قمت ببساطة بتنظيف dirs build (جعل distclean) ، ثم تكوين تمرير العلم -M32 إلى GCC:

./configure CC="gcc -m32"

ثم أعد بناء كل شيء (اصنع كل شيء) وقام بتثبيته (Sudo قم بتثبيت). الآن مشجع:

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

و ReadLine يعمل ، في النهاية.

ملاحظة: يمكنك أيضًا إنشاء حزمة Readline-1.0.1.0 باليد ، كما هو مفصل في "تكوين Cabal Respline على Snow Leopard مع Macports" في قائمة المراسلات Haskell-CAFE في 29 ديسمبر 2009.

نصائح أخرى

أنا أيضًا واجهت هذه الصعوبة. اتضح أنه يمكنك تجميع ثنائيات "الدهون" ، التي تحتوي على نسخ 32 و 64 بت ، والتي تحرف هذه المشكلة بشكل جيد للغاية. هكذا توزع Apple مكتباتها الخاصة ، ويخبركون بك عن كيفية القيام بذلك في هذه الملاحظة التقنية:

بناء الثنائيات العالمية من مشاريع المصدر المفتوح القائمة على "تكوين"http://developer.apple.com/library/mac/#technotes/tn2005/tn2137.html

الملاحظة قديمة بعض الشيء -إنها تتعلق ببناء ثنائيات PPC/I386 -لكن الإجراء عمل بشكل جيد بالنسبة لي عندما استبدلت "-arch i386 -Arch x86_64". لدي الآن ، على سبيل المثال ،

$ file libreredline.a libreadline.a: Mach-O Universal Binary مع 2 بنية Libreadline.A (للهندسة المعمارية I386): AR ARCRATION RANDRAY LIBREADLINE.A (للهندسة المعمارية x86_64): مكتبة أرشيف AR الحالية AR AR AR AR AR AR

تعد محاولة العمل مع المكتبات الخارجية واحدة من أكبر نقاط الألم في هاسكل في الوقت الحالي. يعمل المجتمع على ذلك ، ولكن الحقيقة هي أن معظم مبرمجي Haskell هم الطلاب والأساتذة ، والحفاظ على إجراءات تثبيت قوية بين مختلف الوحدات ، Macs ، و Windows Joxes هي نوع من الأعمال النخقية حيث تحتاج حقًا إلى شركة ذات أموال على الخط من أجل الحصول على النتائج. (فكر في صن مع جافا ...)

بعد أن شعرت بالألم مرات كافية مع GTK و OpenGL ، وصلت بسرعة إلى الاستنتاج القائل بأن أكثر الطرق المتعة للعمل مع Haskell هي التمسك بـ Linux. يمكنني تجنب تسعين في المائة من الألم إذا قمت ببساطة بالتمهيد في أوبونتو.

ومع ذلك ، قد تحصل على خطأ أكثر إفادة إذا جربت follwing:

ghc --make TestReadline.hs

حيث يختبر TestReadLine.hs ببساطة وجود المكتبة ، كما تفعل الآن مع GHCI:

main = do { readline "Prompt" }

هناك أيضًا بعض الأعلام التي قد ترغب في إضافتها إلى ملف .cabal الخاص بـ READLINE الذي قد يساعدك في الخروج: أدوات خارجية ، وحيوانات خارجية ، واختارات LD. هنا هو بعض الوثائق terse جميلة. قد تجد أفضل من خلال Google.

إذا فشل كل شيء آخر ، فإن قناة Haskell IRC مفيدة للغاية.

ولكن في الحقيقة ، هل هناك أي سبب لعدم عمل Haskell القياسي IO؟ كما تعلمون ، شيء من هذا القبيل (cribbed من الصفحة 186 من العالم الحقيقي هاسكل)?

main = do 
   putStrLn "What's your name?"
   inpStr <- getLine
   putStrLn $ "Welcome, " ++ inpStr ++ "!"
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top