Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.52/25: Рейтинг темы: голосов - 25, средняя оценка - 4.52
4 / 4 / 0
Регистрация: 20.07.2016
Сообщений: 59

Создание Exe файла для Лисп

07.08.2016, 21:10. Показов 6381. Ответов 61

Студворк — интернет-сервис помощи студентам
Всем здравствуйте!
Имеется LispStick с Ltk, операционка Windows 7
Есть программа на лиспе под Ltk - окошечко с кнопочками
Вопрос в следующем: как сделать из этой программы исполняемый exe файл? Желательно, чтобы этот экзешник можно было перенести на другой комп (тоже с Виндой), где никаких Лиспов и Ltk с прибамбасами не установлено и он таки заработал!
Нашел cl-launch, но, как я понял, он только для Линуксов...
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.08.2016, 21:10
Ответы с готовыми решениями:

Оконные приложения для Лисп
Всем доброго времени суток! Увлекаюсь Лиспом, пишу на стареньком LisBox. Сам язык программирования просто божественный, но отсутствие как...

Циклы в лисп для построения геометрии
Добрый день! Абсолютный новичок в ЛИСП. Для работы очень срочно нужно понять можно ли реализовать это в ЛИСП. Читаю в интернете...

Создание .exe файла
Здравствуйте, у меня в программе постоянно идёт работа с json файлами, которые находятся в папках skills и date. Например, в методе...

61
331 / 200 / 9
Регистрация: 12.05.2015
Сообщений: 334
09.08.2016, 18:53
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Nigohoyamy Посмотреть сообщение
И ещё: компилирую файл test.lisp (всё пучком), затем вызываю команду
Code
1
(save-lisp-and-die "test.exe" :executable t :toplevel 'main)
выдаёт ошибку
"Cannot save core with multiple threads running.
[Condition of type SIMPLE-ERROR]"

Что-то явно не то...
Попробуй поставить "trivial-dump-core" и запустить
Code
1
(trivial-dump-core::sbcl-save-slime-and-die filename init-function)
заменив аргументы на свои значения. Запускать надо из *inferior-lisp* (не из репла). Но вот как туда перключатся. Я за отсутствием емакса не помню
0
4 / 4 / 0
Регистрация: 20.07.2016
Сообщений: 59
09.08.2016, 19:25  [ТС]
Что бы на *inferior-lisp* переключиться надо нажать M-x и ввести run-lisp. Но это не нужно, так как при запуске он автоматически подключается - надо лишь перейти на него.
Ввожу (trivial-dump-core::sbcl-save-slime-and-die test.lisp main) RET - ничего не происходит...
Замена на (trivial-dump-core::sbcl-save-slime-and-die test.exe 'main) RET ничего не изменила
0
331 / 200 / 9
Регистрация: 12.05.2015
Сообщений: 334
09.08.2016, 19:34
Цитата Сообщение от Nigohoyamy Посмотреть сообщение
Замена на (trivial-dump-core::sbcl-save-slime-and-die test.exe 'main) RET ничего не изменила
test.exe в каsычки => "test.exe" 'main в => #'main

Добавлено через 2 минуты
И проверить не умер ли до этого лисп.
1
4 / 4 / 0
Регистрация: 20.07.2016
Сообщений: 59
09.08.2016, 19:39  [ТС]
Пока я проверяю, скажи, что думаешь о функции Ltk "do-execute"? Она мне никак не поможет?

Добавлено через 2 минуты
Вот что ответил мне *inferior-lisp*:
"debugger invoked on a SB-INT:SIMPLE-READER-PACKAGE-ERROR in thread
#<THREAD "main thread" RUNNING {23FC3D41}>:"
0
331 / 200 / 9
Регистрация: 12.05.2015
Сообщений: 334
09.08.2016, 19:43
Цитата Сообщение от Nigohoyamy Посмотреть сообщение
Пока я проверяю, скажи, что думаешь о функции Ltk "do-execute"? Она мне никак не поможет?
не поможет. Она просто запускает Tk.

Добавлено через 50 секунд
Может быть еще весь emacs перезагрузить?
0
4 / 4 / 0
Регистрация: 20.07.2016
Сообщений: 59
09.08.2016, 19:46  [ТС]
Я перед вводом команды перезагрузил и Emacs и *inferior-lisp* дополнительно перезапустил
0
331 / 200 / 9
Регистрация: 12.05.2015
Сообщений: 334
09.08.2016, 19:48
Цитата Сообщение от Nigohoyamy Посмотреть сообщение
Я перед вводом команды перезагрузил и Emacs и *inferior-lisp* дополнительно перезапустил
И заново trivial-dump загрузил?
0
4 / 4 / 0
Регистрация: 20.07.2016
Сообщений: 59
09.08.2016, 19:55  [ТС]
Да. Попробовал ещё раз - результат тот же!
Может так:
Code
1
2
3
REPL (trivial-dump-core:dump-image "my-core.ccl")
To run the image, use the following command in the terminal:
ccl -I my-core.ccl
Добавлено через 22 секунды
Только под sbcl
0
331 / 200 / 9
Регистрация: 12.05.2015
Сообщений: 334
09.08.2016, 20:02
Цитата Сообщение от Nigohoyamy Посмотреть сообщение
Да. Попробовал ещё раз - результат тот же!
Может так:
Code
1
2
3
REPL (trivial-dump-core:dump-image "my-core.ccl")
To run the image, use the following command in the terminal:
ccl -I my-core.ccl
Добавлено через 22 секунды
Только под sbcl
Это ты сейчас из старого лиспbox-а взял?
Или это lispstck выводит?

Добавлено через 1 минуту
Или из доков?
0
4 / 4 / 0
Регистрация: 20.07.2016
Сообщений: 59
09.08.2016, 20:03  [ТС]
Это я с http://www.cliki.net/trivial-dump-core взял
0
331 / 200 / 9
Регистрация: 12.05.2015
Сообщений: 334
09.08.2016, 20:07
Лучший ответ Сообщение было отмечено Nigohoyamy как решение

Решение

Вот есть еще одна странная штука
Code
1
2
3
4
5
6
7
8
9
(defmacro with-sbcl (() &body body)
  `(uiop/run-program:run-program (list (first (uiop/image:raw-command-line-arguments))
                                       "--core" (princ-to-string sb-int:*core-string*)
                                       "--non-interactive"
                                       "--eval" (format nil "~s"
                                                  '(progn ,@body)))
                                 :output *standard-output*
                                 :error-output *standard-output*
                                 :ignore-error-status t)[code)
использовать в репле
Code
1
2
3
(with-sbcl ()
  (ql:quickload "ltk")
  (sb-ext:save-lisp-and-die "c:\\hh.exe" :executable t :toplevel (symbol-function (find-symbol "LTKTEST" "LTK"))))
1
4 / 4 / 0
Регистрация: 20.07.2016
Сообщений: 59
09.08.2016, 20:12  [ТС]
Тут не опечатка ли?
:ignore-error-status t)[code)

Добавлено через 1 минуту
А то REPL ругается
0
331 / 200 / 9
Регистрация: 12.05.2015
Сообщений: 334
09.08.2016, 20:15
eQUOTE=Nigohoyamy;9442799]Это я с http://www.cliki.net/trivial-dump-core взял[/QUOTE]
А. Тогда вводить в *inferior-lisp* то что выводит запуск
Code
1
(trivial-dump-core:save-executable "test.exe" #'main)
Но там по идее то же чтоя предлагал раньше.

Добавлено через 2 минуты
Цитата Сообщение от Nigohoyamy Посмотреть сообщение
Тут не опечатка ли?
:ignore-error-status t)[code)
Опечатка. "[code]" выкинуть остатки форумного форматирования.
0
4 / 4 / 0
Регистрация: 20.07.2016
Сообщений: 59
09.08.2016, 20:18  [ТС]
Вот что выдал
caught WARNING:
; undefined variable: [CODE]
;
; compilation unit finished
; Undefined variable:
; [CODE]
0
331 / 200 / 9
Регистрация: 12.05.2015
Сообщений: 334
09.08.2016, 20:22
Цитата Сообщение от Nigohoyamy Посмотреть сообщение
Вот что выдал
caught WARNING:
; undefined variable: [CODE]
;
; compilation unit finished
; Undefined variable:
; [CODE]
"[CODE]" стереть отовсюду макрос перекомпилировать
0
4 / 4 / 0
Регистрация: 20.07.2016
Сообщений: 59
09.08.2016, 20:34  [ТС]
Таки заработало!
Но есть косяк: если в
(sb-ext:save-lisp-and-die "c:\\hh.exe" :executable t :toplevel (symbol-function (find-symbol "LTKTEST" "LTK"))))
меняю "c:\\hh.exe" -> на "E:\Program\lispstick\Project\GUI\test.e xe", а "LTKTEST" -> на "main", то экзешник не создаётся...
В чём косяк?

Добавлено через 1 минуту
Даже ошибки не пишет - просто NIL

Добавлено через 2 минуты
Сделал так:
Code
1
2
3
(with-sbcl ()
  (ql:quickload "ltk")
  (sb-ext:save-lisp-and-die "E:\Program\lispstick\Project\GUI\test.exe" :executable t :toplevel 'main))
Экзешник создался, но не запускается - на пол секунды появляется консоль и тут же исчезает...

Добавлено через 47 секунд
Может в самой функции main что-то надо добавить?
0
331 / 200 / 9
Регистрация: 12.05.2015
Сообщений: 334
09.08.2016, 20:35
Цитата Сообщение от Nigohoyamy Посмотреть сообщение
а "LTKTEST" -> на "main", то экзешник не создаётся...
"MAIN" большими буквами. И находится он наверное не в пакете "LTK" еще. Ну или ты его не подгружал. Все потребное должно быть загружено внутри (with-sbcl () ...)
0
4 / 4 / 0
Регистрация: 20.07.2016
Сообщений: 59
09.08.2016, 20:41  [ТС]
Переименование функции не помогло - подумал, может конфликт названий...
И как-то странно, что не надо указывать конкретный файл, в котором лежит функция - он его "де-факто" сам ищет, а прописанный мной путь вообще мимо кассы...

Добавлено через 4 минуты
Эм, а как подгрузить его в пакет Ltk?
Через REPL или нужно в ltk.lisp прописывать?
0
331 / 200 / 9
Регистрация: 12.05.2015
Сообщений: 334
09.08.2016, 20:45
Он его не ищет! Если твоя функция #'main лежит в "my.lisp" в пакете "PROGRAM" и использует ltk
Code
1
2
3
4
(with-sbcl ()
  (ql:quicklisp :ltk)
  (load "c:\\my.lisp")
  (sb-ext:save-lisp-and-die "c:\\test.exe" :executable t :toplevel (symbol-function (find-symbol "MAIN" "PROGRAM"))))
1
4 / 4 / 0
Регистрация: 20.07.2016
Сообщений: 59
09.08.2016, 22:19  [ТС]
Всё, сделался экзешник, и запускается!
Теперь в другом косяк: при запуске exe весь текст в окне - кракозябры, хотя команду (setf sb-impl::*default-external-format* :utf8) я ввёл до создания exe, и саму функцию проверял из REPLa - всё пучком было...

Добавлено через 1 минуту
Да, и как консоль с заднего плана убрать?

Добавлено через 56 минут
И на счёт переносимости вопрос пока открытый: созданный exe перекинул на ноут, на котором кроме LispBox больше ничего нет, и он там успешно не запустился! Как я понимаю, надо установить Tcl/Tk? Или ещё что-то?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.08.2016, 22:19

Создание exe файла
Подскажите,пожалуйста,как мне из созданного в Guide приложения создать ехе? пробую так получаю такую ошибку HttpSendRequest...

Создание exe файла
Здравствуйте! Прочитал тему &quot;Создание exe файла в MatLab&quot;, решил попробовать. Дошёл до шага - запускаем deploytool., но у меня MatLab...

Создание exe файла
Подскажите какую то статтю, где описано создание exe файла для Unity. Зарание спасибо.

Создание exe файла
Может это конечно из области фантастики) но хочу сделать из базы данных с расширением .accdb .exe файл, если это возможно. Что бы...

Создание exe файла
Привет всем. Как создать програму на C++ Builder 6, которая может создать любой (для примеру) exe файл.... тоесть ми запсукаем програму,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru