سؤال

لقد بدأت للتو في تعلم Lisp ولا أستطيع معرفة كيفية تجميع كود LISP وربطه بملف قابل للتنفيذ.

أنا استخدم clisp و clisp -c ينتج ملفين:

  • .فاس
  • .lib

ماذا أفعل بعد ذلك للحصول على ملف قابل للتنفيذ؟

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

المحلول

كنت في الواقع أحاول القيام بذلك اليوم، ووجدت أن كتابة هذا في CLisp REPL يعمل:

(EXT:SAVEINITMEM "executable.exe"
                 :QUIET t
                 :INIT-FUNCTION 'main
                 :EXECUTABLE t
                 :NORC t)

حيث main هو اسم الوظيفة التي تريد الاتصال بها عند تشغيل البرنامج، :QUIET t يمنع شعار بدء التشغيل، و :EXECUTABLE t يجعل الأصلي قابلاً للتنفيذ.

قد يكون من المفيد أيضًا الاتصال

(EXT:EXIT)

في نهاية وظيفتك الرئيسية لمنع المستخدم من الحصول على مطالبة lisp تفاعلية عند انتهاء البرنامج.

يحرر:قراءة الوثائق، قد ترغب أيضًا في إضافتها :NORC t(يقرأ وصلة).يؤدي هذا إلى منع تحميل ملف RC (على سبيل المثال، ~/.clisprc.lisp).

نصائح أخرى

هذا ال الأسئلة الشائعة حول ليسب (متكيف قليلاً):

*** كيف أقوم بعمل ملف تنفيذي من برنامجي؟

هذا يعتمد على التنفيذ الخاص بك؛ستحتاج إلى استشارة وثائق البائع الخاصة بك.

  • مع ECL و GCL ، ستنتج عملية التجميع القياسية قابلة للتنفيذ الأصلي.

  • مع LispWorks، راجع دليل مستخدم التوصيل قسم الوثائق.

  • مع Allegro Common Lisp، راجع توصيل قسم الدليل.

  • إلخ...

ومع ذلك ، فإن الطريقة الكلاسيكية للتفاعل مع برامج LISP المشتركة لا تشمل التنفيذيين المستقلين.لننظر في هذا خلال مرحلتين من عملية التطوير:البرمجة والتسليم.

مرحلة البرمجة:إن تطوير LISP الشائع له شعور تدريجي أكثر مما هو شائع في اللغات الموجهة نحو الدفعة ، حيث تكون دورة ارتباط التحرير الشائعة.سيقوم مطور CL بإجراء اختبارات بسيطة وتفاعلات عابرة مع البيئة في REPL المستمع).يتم حفظ التعليمات البرمجية المصدر في الملفات ، ويتم تسجيل تبعيات الإنشاء/التحميل بين ملفات المصدر في منشأة وصف النظام مثل ASDF (الذي يلعب دورًا مشابهًا لـ يصنع في تحرير أنظمة الارتباط).يوفر منشأة وضع النظام أوامر لبناء نظام (وعيد ترجمة الملفات التي تغيرت تبعياتها منذ البناء الأخير) ، ولتحميل النظام في الذاكرة.

توفر تطبيقات LISP الأكثر شيوعًا أيضًا آلية "حفظ العالم" تجعل من الممكن حفظ لقطة من صورة LISP الحالية ، في شكل يمكن إعادة تشغيله لاحقًا.تتكون بيئة LISP الشائعة عمومًا من وقت تشغيل صغير قابل للتنفيذ ، وملف صورة أكبر يحتوي على حالة عالم LISP.يتمثل أحد الاستخدامات الشائعة لهذا المرفق في تفريغ صورة مخصصة تحتوي على جميع أدوات البناء والمكتبات المستخدمة في مشروع معين ، من أجل تقليل وقت بدء التشغيل.على سبيل المثال ، يتوفر هذا المرفق تحت اسم Ext: Save-Lisp في CMUCL ، SB-Ext: Save-Lisp-Die في SBCL ، Ext: SaveInitMem في clisp ، و CCL: التوفير في OpenMCL.يمكن لمعظم هذه التطبيقات تقديم وقت التشغيل إلى الصورة ، مما يجعلها قابلة للتنفيذ.

تسليم التطبيق:بدلاً من إنشاء ملف قابل للتنفيذ واحد للتطبيق ، يحفظ مطورو LISP بشكل عام صورة تحتوي على تطبيقهم ، وتسليمها إلى العملاء مع وقت التشغيل وربما غلاف SHERD-SPRIPT الذي يستدعي وقت التشغيل مع صورة التطبيق.على منصات Windows ، يمكن إخفاء هذا من المستخدم باستخدام أداة نوع Click-O-Matic للتثبيت.

ألق نظرة على الصفحة الرئيسية الرسمية لـclisp.هناك أسئلة وأجوبة تجيب على هذا السؤال.

http://clisp.cons.org/impnotes/faq.html#faq-exec

لدى CLiki إجابة جيدة أيضًا: إنشاء الملفات التنفيذية

للحصول على طريقة محمولة للقيام بذلك، أوصي روزويل.

بالنسبة لأي تطبيق مدعوم، يمكنك إنشاء برامج نصية lisp لتشغيل البرنامج الذي يمكن تشغيله بطريقة محمولة ros والتي يمكن استخدامها في سطر التجزئة بشكل مشابه لقول برنامج بايثون أو روبي.

بالنسبة لـ SBCL وCCL، يمكن لـ roswell أيضًا إنشاء ملفات تنفيذية ثنائية باستخدام ros dump executable.

أعلم أن هذا سؤال قديم ولكن كود Lisp الذي أتطلع إليه عمره 25 عامًا :-)

لم أتمكن من الحصول على تجميع يعمل مع clisp على نظام التشغيل Windows 10.ومع ذلك، عملت بالنسبة لي مع gcl.

إذا كان ملف lisp الخاص بي هو jugs2.lisp،

gcl -compile jugs2.lisp

يؤدي هذا إلى إنشاء ملف jugs2.o إذا لم يكن ملف jugs2.lisp يحتوي على أخطاء.

قم بتشغيل gcl ​​بدون أي معلمات لتشغيل مترجم Lisp:

gcl

قم بتحميل الملف .o:

(load "jugs2.o")

لإنشاء ملف EXE:

(si:save-system "jugs2")

عند تشغيل EXE فإنه يحتاج إلى DLL oncrpc.dll;هذا في <gcl install folder>\lib\gcl-2.6.1\unixport المجلد الذي ينشئه gcl.bat.

عند تشغيله ، يُظهر بيئة LISP ، اتصل بالرقم (الرئيسي) لتشغيل الوظيفة الرئيسية (الرئيسية).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top