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

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

07.08.2016, 21:10. Показов 6392. Ответов 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, 10:02
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Nigohoyamy Посмотреть сообщение
"tclkit-pathnames" на "tclkit-tclkit" - ошибка та же...
Должно получится что-то вроде
Code
1
(uiop/pathname:merge-pathnames* "tclkit-8.6.3-win32-ix86.exe" (uiop/filesystem:lisp--implementation-directory))
Добавлено через 3 минуты
Цитата Сообщение от Nigohoyamy Посмотреть сообщение
Загрузил :uiop
Там можно посмотреть, как внутри dump-image используется save-lisp-and-die. Специально ставить не нужно.

Добавлено через 3 минуты
Или просто присвоить ltk:*wish-pathname* абсолюный путь к tclkit-*.exe. Это я уже автопоиск заделал.

Добавлено через 7 минут
Цитата Сообщение от Nigohoyamy Посмотреть сообщение
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
(defun main ()
  (setf *db* "")
  (let ((ltk:*wishpathname* (uiop/pathname:merge-pathnames* tclkit-pathnames (uiop/filesystem:lisp-implementation-directory))))
    (with-ltk (:debug-tcl nil)
      (let* ((gen (make-instance 'frame))
         (title (make-instance 'label :text "Расчёт квадрата числа" :justify :center))
         (text1 (make-instance 'entry :master gen :text "Введите число" :takefocus t))
         (knopka (make-instance 'button :master gen :text "Ввод" 
                    :command (lambda () (setf *db* (text text1))))))
    (pack gen)
    (pack title :side :left)
    (pack text1 :side :left)
    (pack knopka :side :right)
    ))))
Кстати Фрейм-ы лучше pack-овать после их содержимого. Так Tk быстрее работать будет.
0
4 / 4 / 0
Регистрация: 20.07.2016
Сообщений: 59
09.08.2016, 10:28  [ТС]
Сделал! Теперь файл компилируется, но при вызове функции в REPLе выпадает ошибка:
"The value
#P"E:/Program/lispstick/Steel Bank Common Lisp/1.1.12/tclkit.exe"
is not of type
SEQUENCE.
[Condition of type TYPE-ERROR]"
0
331 / 200 / 9
Регистрация: 12.05.2015
Сообщений: 334
09.08.2016, 11:24
Цитата Сообщение от Nigohoyamy Посмотреть сообщение
#P"E:/Program/lispstick/Steel Bank Common Lisp/1.1.12/tclkit.exe"
is not of type
SEQUENCE.
[Condition of type TYPE-ERROR]"
Попробуй заменить на "E:/Program/lispstick/Steel Bank Common Lisp/1.1.12/tclkit.exe" без #P
0
4 / 4 / 0
Регистрация: 20.07.2016
Сообщений: 59
09.08.2016, 11:29  [ТС]
У меня этого и #P нет.
Вот как выглядит код:
Code
1
(let ((ltk:*wish-pathname* (uiop/pathname:merge-pathnames* "E:/Program/lispstick/Steel Bank Common Lisp/1.1.12/tclkit.exe" (uiop/filesystem:lisp-implementation-directory))))
0
331 / 200 / 9
Регистрация: 12.05.2015
Сообщений: 334
09.08.2016, 11:55
Цитата Сообщение от Nigohoyamy Посмотреть сообщение
vУ меня этого и #P нет.
Вот как выглядит код:
Code
1
(let ((ltk:*wish-pathname* (uiop/pathname:merge-pathnames* "E:/Program/lispstick/Steel Bank Common Lisp/1.1.12/tclkit.exe" (uiop/filesystem:lisp-implementation-directory))))
Если через merge-pathnames* то просто "tclkit.exe" без пути. И оберни все в (princ-to-string ..
Code
1
 ... ltk:*wish-pathname* (princ-to-string (uiop/pathname:merge-pathnames* "tclkit.exe" ...
Прошлый вариант без princ - это моя шиза. Но tclkit должен лежать в одном каталоге с образом.

Если хочешь вызывать по абсолютному пути то
Code
1
2
(let ((ltk:*wish-pathname* "E:/Program/lispstick/Steel Bank Common Lisp/1.1.12/tclkit.exe"))
  ...)
0
4 / 4 / 0
Регистрация: 20.07.2016
Сообщений: 59
09.08.2016, 12:22  [ТС]
Функция запустилась, и пока REPL думает, вопрос таки в следующем: а если у меня десять файлов, в каждом по +100500 функций и вся эта куча нужна для работы одной программы, то как в таком случае делать экзешник?
Или код
Code
1
((ltk:*wish-pathname* (princ-to-string (uiop/pathname:merge-pathnames* "E:/Program/lispstick/Project/GUI/tclkit.exe" (uiop/filesystem:lisp-implementation-directory)))))
..., записанный в "голове" главной функции (как в примере выше) автоматически подтянет все вспомогательные файлы и функции?

Добавлено через 8 минут
Хм, прошло уже 10 минут, а ничего не происходит, REPL как будто завис...
0
331 / 200 / 9
Регистрация: 12.05.2015
Сообщений: 334
09.08.2016, 12:28
Цитата Сообщение от Nigohoyamy Посмотреть сообщение
Code
1
((ltk:*wish-pathname* (princ-to-string (uiop/pathname:merge-pathnames* "E:/Program/lispstick/Project/GUI/tclkit.exe" (uiop/filesystem:lisp-implementation-directory)))))
..., записанный в "голове" главной функции (как в примере выше) автоматически подтянет все вспомогательные файлы и функции?
Этот код ищет tclkit.exe для Ltk и ничего больше. 1000 функций подгружать отдельно обычным образом

Добавлено через 1 минуту
В образе будет все что было загружено до вызова dump-image

Добавлено через 2 минуты
Цитата Сообщение от Nigohoyamy Посмотреть сообщение
Хм, прошло уже 10 минут, а ничего не происходит, REPL как будто завис...
А что ты ему в последний раз скормил?
0
4 / 4 / 0
Регистрация: 20.07.2016
Сообщений: 59
09.08.2016, 12:32  [ТС]
Перезапустил LispStick, заново запустил main - REPL пыхтит, а толку нет...
Что-то явно не так...

1000 функций подгружать отдельно обычным образом
Обычным образом - это каким?

Когда я делал экзешник на линуксе, я в консоле прописывал команду, где указывал функции и файлы - в сам код ничего не добавлял - и всё само собиралось!
0
331 / 200 / 9
Регистрация: 12.05.2015
Сообщений: 334
09.08.2016, 12:36
Цитата Сообщение от Nigohoyamy Посмотреть сообщение
Обычным образом - это каким?
QL, ASDF, load.
0
4 / 4 / 0
Регистрация: 20.07.2016
Сообщений: 59
09.08.2016, 12:41  [ТС]
Ладно, вопрос пока не в этом.
REPL, в итоге, так и повис. Никакого экзешника не создалось! Что не так?
0
331 / 200 / 9
Регистрация: 12.05.2015
Сообщений: 334
09.08.2016, 12:45
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
;(load "~/tmp/asdf/build/asdf.lisp")
 
(ql:quickload 
  '(:bknr.datastore
     :bknr.data.impex
     ;:inferior-shell
     :mcclim
     :usocket
     :cl-tk
     :sqlite
     :cl-gobject-introspection
     :cl-libxml2
     :xfactory
     :hunchentoot
     :cl-json
     :cl-xmlspam
     :collectors
     :fmt))
;(require :init-webdev)
;(require :css-lite)
;(require :cl-who)
 
(save-lisp-and-die (format nil "/home/alex/t-style-~a-~a.core.tmp"
                          (lisp-implementation-version)
                          (ql-dist:version (ql-dist:dist "quicklisp"))) 
                   :purify t)
Вот кстати файл, который делает мой рабочий образ. Запускается через sbcl --load file.lisp

Добавлено через 1 минуту
Цитата Сообщение от Nigohoyamy Посмотреть сообщение
Ладно, вопрос пока не в этом.
REPL, в итоге, так и повис. Никакого экзешника не создалось! Что не так?
Что ты ему в последний раз скормил?
0
4 / 4 / 0
Регистрация: 20.07.2016
Сообщений: 59
09.08.2016, 12:47  [ТС]
Вот код
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
(defun main ()
  (setf *db* "")
  (let ((ltk:*wish-pathname* (princ-to-string (uiop/pathname:merge-pathnames* "E:/Program/lispstick/Project/GUI/tclkit.exe" (uiop/filesystem:lisp-implementation-directory)))))
    (with-ltk (:debug-tcl nil)
      (let* ((gen (make-instance 'frame))
         (title (make-instance 'label :text "Расчёт квадрата числа" :justify :center))
         (text1 (make-instance 'entry :master gen :text "Введите число" :takefocus t))
         (knopka (make-instance 'button :master gen :text "Ввод" 
                    :command (lambda () (setf *db* (text text1))))))
    (pack gen)
    (pack title :side :left)
    (pack text1 :side :left)
    (pack knopka :side :right)
    ))))
В REPLе вызвал функцию main... и тишина!
0
331 / 200 / 9
Регистрация: 12.05.2015
Сообщений: 334
09.08.2016, 12:55
Выставь debug-tcl. И я выше писал что вместе с merge-pathnames* нужно просто "tclkit.exe" без пути. и здесь не образ создается а просто окошки при помощи уже tclkit а не Tk.

И наверное мы уже окончательно запутались и надо отдохнуть.
0
4 / 4 / 0
Регистрация: 20.07.2016
Сообщений: 59
09.08.2016, 14:17  [ТС]
И я выше писал что вместе с merge-pathnames* нужно просто "tclkit.exe" без пути. и здесь не образ создается а просто окошки при помощи уже tclkit а не Tk.
Если так, то он ищет tclkit.exe в папке с sbcl, что, в общем-то, уже не принципиально.

Выставь debug-tcl.
Выставил - ничего...

И наверное мы уже окончательно запутались и надо отдохнуть.
Согласен! Думаю, надо начать с начала, а то мы совсем в никуда уехали!..

Когда отдохнём, надо делать всё по порядку: что установить, что и куда прописать, - а то получается, всё как-то отрывками, как с бодуна, пардон...

Добавлено через 1 час 5 минут
И ещё: компилирую файл 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]"

Что-то явно не то...
0
199 / 102 / 4
Регистрация: 16.08.2015
Сообщений: 209
09.08.2016, 16:08
Я чисто для риторики отвечу, что у меня и проблема создания образа решена, и проблема распространения tcl/tk совместно с приложением. Например, для создания экзешника у меня есть вот такой батничек
А tcl/tk просто и легко распаковывается из того же архива, что и исполняемый образ. То есть, на всё, что вы тратите сейчас время, я уже давно проделал и предложил всем желающим на блюдечке с каёмочкой. Вы могли пойти по такому пути, как взять моё приложение, склонировать его, поменять в нём то, что нужно и распространять как своё. Но вы пошли путём мужества. Сейчас вы сломаетесь на ltk, а потом возьмёте homelisp с закрытыми исходниками. Что ж, следуйте путём мужества и далее - могу только пожелать достичь вашей цели, тем или иным способом. Чем больше полезных программ на лиспе - тем лучше

Добавлено через 6 минут
Правильный адрес батничка вот такой должен получиться: https://bitbucket.org/budden/y... ew-default

Добавлено через 58 секунд
Кстати, вот отзыв опытного пользователя ltk:
Цитата Сообщение от nullxdth Посмотреть сообщение
На самом деле в ltk почти всё плохо:
В основе своей ltk разговаривает с wish текстом (фрагментами на Tcl);
практически не представляет никаких абстракций и не имеет никакого дизайна - почти все функции один в один tk команды;
ltk очень старый и много чего не реализует даже из базового API, например структура event включает в себя далеко не всё, что нужно:
LispВыделить код
1
2
3
4
5
6
7
8
9
10
(defstruct event
* x
* y
* keycode
* char
* width
* height
* root-x
* root-y
* mouse-button)
Тут даже нет идентификатора widget'а.
Это так, на вскидку... На самом деле, куда не капни - везде не доделано или сделано плохо.
Можно конечно исправлять и переписывать. Я этим и занимался продолжительное время использования ltk, но устал. Я думаю, что смысла нет - лучше написать всё с нуля и по другому.
Лучше всего в основе подвязаться средствами cffi к C API: http://www.tcl.tk/man/tcl8.5/TclLib/contents.htm, http://www.tcl.tk/man/tcl8.5/TkLib/contents.htm. И конечно нужно положить всё это на CLOS с адекватным Lisp-у дизайном.
Задача конечно ни шибко тривиальная относительно дизайна, но я думаю игра стоит свеч.
0
4 / 4 / 0
Регистрация: 20.07.2016
Сообщений: 59
09.08.2016, 16:10  [ТС]
To budden: попытка отчаянная, но дешёвая и не удачная!
Я смотрел твою псевдокрутую программу - HomeLisp лучше!
Да и на форуме решают проблемы кода, а не по дешёвому рекламируют свои "творения".
0
199 / 102 / 4
Регистрация: 16.08.2015
Сообщений: 209
09.08.2016, 16:28
Нет, моё состояние никак нельзя назвать отчаянием. Я просто изучаю реакцию людей ну и пользуюсь случаем заронить семена сомнений. При сравнении степени доработанности homelisp и clcon нужно учитывать, что homelisp появился в 2010 году, а clcon - в 2015. Моя среда будет улучшаться - новый код мы добавляем почти каждый день. А homelisp - вряд ли. Смотрите, они выпустили три версии в 10-м,12-м и 12-м годах. И всё.

По другим параметрам - открытые исходники при прочих равных лучше, следование стандартам - лучше, кроссплатформенность - лучше. Так что если смотреть вперёд и учитывать все факторы, то моя разработка конечно же лучше, несмотря на имеющиеся недостатки.

Но я её не рекламирую, потому что я её не продаю. Моя деятельность некоммерческая. Так что ваше обвинение мимо, да и слово "творение" вы зря поставили в кавычки. Наверное, обидеть хотели - ведь обидеть художника может каждый Но не получилось обидеть

Добавлено через 55 секунд
И самое главное, я вам предлагаю решение. У меня есть решение всех вопросов, которые вы задали, и многих, которые вы ещё зададите. Просто мне не нужно их повторять на форуме - я даю ссылку на решение, выполненное уже в виде кода.
0
4 / 4 / 0
Регистрация: 20.07.2016
Сообщений: 59
09.08.2016, 16:35  [ТС]
Хотел бы обидеть, написал бы совсем по другому!
Я сам художник, и не привык срисовывать с других! Раз отказался помогать по факту, то свои ссылки оставь при себе - поиском и я сам умею пользоваться! И если не хочешь, или не можешь, ответить на поставленный мною вопрос, то прошу не захламлять форум своей демагогией о великом... Без Ван Гогов с Гегелями обойдёмся!
0
199 / 102 / 4
Регистрация: 16.08.2015
Сообщений: 209
09.08.2016, 16:44
Цитата Сообщение от Nigohoyamy Посмотреть сообщение
Я сам художник, и не привык срисовывать с других!
В программировании это называется "велосипедостроитель" и гордиться тут нечем.

Понимаешь, если я буду тебе помогать, то это время будет отнято от моего проекта. А он стоит мне неимоверных усилий. Поэтому я ищу тех, кто готов _мне_ помогать, а вовсе не наоборот. Я тебе даже деньги предлагал за помощь. Я уже заплатил в этом месяце за помощь двум людям и думаю, что они довольны. Условия достаточно выгодные. Поэтому нельзя сказать, что я халявщик. Более того, и лично для тебя я написал кусок кода. Так что тут ты опять мимо.

Но не буду больше тратить время. Удачи тебе в твоём труде.
0
4 / 4 / 0
Регистрация: 20.07.2016
Сообщений: 59
09.08.2016, 16:55  [ТС]
У каждого свой велосипед, а чей лучше - время покажет. Иначе бы в Мире был только один язык программирования. Тут ты мимо.
У меня свой проект, и тратить время на твой, даже за фантики я не намерен. Тем более концепция его мне не ясна!
Да пока ты писал все эти сообщения, да ещё в предыдущей теме спорил с antares0, ты времени потратил в 100 раз больше, чем если бы мне помог! И тут мимо.
Ну а твой кусок кода, увы, был мимо кассы, так что и тут ты мимо!
Au revoir!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.08.2016, 16:55

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка 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С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru