LINUX.ORG.RU

Проблема с lambda-gtk


0

0

Gentoo. sbcl.
Делаю всё как по ссылке:
http://aroks.kiev.ua/pub/wiki/DokumentacijaPoLisp/BystrajaNastrojjkaBindingaLamb
daGTK?v=kv0

Т.е. ссылки в ~/.sbcl
Далее - 
(require 'lambda-gtk-examples)
The value T is not of type NUMBER.
   [Condition of type TYPE-ERROR]
Тож самое и для:
(asdf:operate 'asdf:load-op 'lambda-gtk-examples)

Хотя вчера это проходило, компилилось...
Зато была другая проблема:
(defmacro g::callback (x)
  #+:sbcl `(alien::callback ,x)
  ;`(alien-function-sap ,x)
  #+:cmu `(alien::callback ,x))
А определения alien-function-sap нигде нет!
asdf и cffi установлены...

Помогите разобраться. Ни один биндинг, кроме XLIB, не подрубается.


У меня заработало на Ubuntu. sbcl 0.9.15, cffi 0.9.1. Может версия sbcl старая? Я брал из debian-unstable и пересобирал для Ubuntu.

PS. Что значит asdf установлен? В sbcl он уже встроенный, так что попытка установить его отдельно на Debian/Ububtu приводит к предложению удалить sbcl.

kpanic ★★
()
Ответ на: комментарий от kpanic

> Это уже довольно старая версия sbcl

А 0.9.18 какой считается ? Ставить ?

eraser
() автор топика

> Делаю всё как по ссылке:

Рад, что мои заметки кому-то пригодились :-)).

Когда записывал, проверял все на Gentoo, версию SBCL не помню. :-( Но все работало.

> PS. Что значит asdf установлен? В sbcl он уже встроенный, так что попытка установить его отдельно на Debian/Ububtu приводит к предложению удалить sbcl.

В прошлую субботу в Gentoo вышла очередная версия SBCL, после сборки отвалился нахрен AFDF и все, что с ним было связано. Пришлось восстанавливать его руками, причем выползли проблемы прав доступа (типа обычному пользователю нельзя создать fasl в каталоге usr при первой загрузке -- раньше такой проблемы не было), плюс к этому посыпались все системы не в домашнем каталоге. Возможно, и gtk отвалилось.

Если не сильно срочно, то я вечером посмотрю версии, попробую повторить все и сообщу о результатах.

eugine_kosenko ★★★
()
Ответ на: комментарий от eugine_kosenko

Кстати, все заметки были вытянуты из дискуссии на ветке "Фраза о Лиспе":

http://www.linux.org.ru/jump-message.jsp?msgid=1587106#1597954 http://www.linux.org.ru/jump-message.jsp?msgid=1587106#1600881

====== $ sbcl This is SBCL 0.9.17, an implementation of ANSI Common Lisp. ======

Ну вот на этом работало. А в 0.9.18, как я писал, сломался ASDF

Может, поможет...

eugine_kosenko ★★★
()
Ответ на: комментарий от eugine_kosenko

> версию SBCL не помню. :-( Но все работало.

Скорее всего у меня из-за старости версии глючит. Сначала даж окошки рисовала, тока на alien-function-sap ругалась и не мог события обрабатывать.

Сеодня вечером снесу всё нах и свежий sbcl поставлю... Может пллусится...

> я вечером посмотрю версии, попробую повторить все и сообщу о результатах

Вот это хорошо было б :)

eraser
() автор топика
Ответ на: комментарий от eugine_kosenko

> Ну вот на этом работало. А в 0.9.18, как я писал, сломался ASDF

Ну вот поставил sbcl 0.9.18. Результат:

* (asdf:operate 'asdf:load-op 'lambda-gtk-examples)

debugger invoked on a SB-KERNEL:READER-PACKAGE-ERROR: READER-ERROR on #<SYNONYM-STREAM :SYMBOL SB-SYS:*STDIN* {90C7CC1}>: package "ASDF" not found

cl-asdf - установлен...

eraser
() автор топика
Ответ на: комментарий от eraser

Авот еще при запуске:

* (require 'lambda-gtk-examples)

debugger invoked on a SB-INT:EXTENSION-FAILURE: Don't know how to REQUIRE LAMBDA-GTK-EXAMPLES.

Почему так ?

eraser
() автор топика
Ответ на: комментарий от eraser

> package "ASDF" not found

Не знаю в чем проблема с 0.9.18, но sbcl не нужен cl-asdf, так как в sbcl встроен свой asdf.

Тем более, что выше eugine_kosenko писал, что в 0.9.18 поломан asdf. А у него работало на 0.9.17, у меня на 0.9.15 - так что попробуй на какой-то из этих версий.

kpanic ★★
()
Ответ на: комментарий от kpanic

> но sbcl не нужен cl-asdf, так как в sbcl встроен свой asdf.

Ну не знаю... У меня по зависимостям для sbcl тянутся:

Calculating dependencies... done!
[ebuild  N    ] dev-lisp/cl-asdf-1.89  59 kB
[ebuild  N    ] app-admin/realpath-1.9.28  105 kB
[ebuild  N    ] dev-lisp/common-lisp-controller-5.13-r1  30 kB
[ebuild  N    ] dev-lisp/sbcl-0.9.17  USE="unicode -doc -ldb -source -threads" 10,060 kB

Причём это для 0.9.17. ДЛя 0.9.18 тож самое...

А вот в ....common-lisp/asdf есть файл asdf-install.lisp. Я ему делаю из sbcl load, он начинает чёт компилить и говорит, что ща установлюсь в ~/.sbcl/system (и ещё какой-то каталог-ща не помню), я ему - ставься. В указанных каталогах ничего не поставилось.... Может в этом направлении порыть надо...?

eraser
() автор топика
Ответ на: комментарий от eraser

> А вот в ....common-lisp/asdf есть файл asdf-install.lisp.

Не, это полный тупик. Все, как описано, я прошлую субботу угробил, пытаясь итти этим путем. Проблему решает запуск sbcl от рута, потом (require 'asdf), потом я делал (save-lisp-and-die "sbcl.core"), после чего подменял ядро в каталоге бинарников sbcl. После этого asdf становится доступным сразу после запуска.

И после этого все та же лажа по всем пакетам -- он для каждого при подгрузке пытается сгенерировать fasl, и от обычного пользователя спотыкается о Permission denied.

В общем, пока выкрутился так: завел в ~/.sbcl/source, скопировал туда все системы из /usr/share/common-lisp/source, и в ~/.sbcl/systems прописал правильные линки на соответствующие asd. Я так понял, это все должен был сделать asdf-install в режиме локальной установки, но не сделал. После этого у система нормально компилит подкачиваемые модули. Возможно, что и сам asdf лучше разместить аналогично, тогда его можно и не вшивать в ядро.

Ну или как тут предлагают, воспользоваться sbcl версии 0.9.17.

P.S. За задержку извиняюсь, вчера неожиданно образовалась грандиозная пьянка, домой пришел за полночь. Сегодня обязательно попробую.

eugine_kosenko ★★★
()

Могу рассказать, как это выглядит в Debian. Сейчас в testing есть только SBCL 0.9.17. Установка: Ставится SBCL (с sbcl-dist.core) и вместе с ним common-lisp-controller (который, кстати, тоже в Gentoo есть). Пакет common-lisp-controller зависит от asdf. Он его тоже притащит. Дальше на этапе настройки SBCL компилируется clc. И делается save-lisp-and-die.

В результате сохраняется ядро sbcl.core, которое и становится умолчательным. Все это делается автоматически в Debian, а не руками.

$ ls -l /usr/lib/sbcl

-rw-r--r-- 1 root root 24915976 2006-10-19 02:50 sbcl.core -rw-r--r-- 1 root root 23269384 2006-09-05 13:55 sbcl-dist.core

То, как вообще установка sbcl выглядит в Gentoo, я не знаю. Когда и как осуществляется компиляция asdf мне неизвестно.

Все эти действия можно в принципе проделать и руками, но от рута. То есть в /usr/share/common-lisp/source/asdf загнать asdf (такой каталог используется в Debian) и все это дело дружно скомпилировать. потом сохранить в каталоге /usr/lib/sbcl ядро. И все будет.

Zubok ★★★★★
()

Тьфу, случайно нажалось. Продолжу. Но можно и не от рута, а в пользовательском каталоге сохранить asdf. И скомпилировать пользовательское ядро. И потом запускать его, а не дефолтное. Основная проблема в том, что в Gentoo, видимо, забыли после установки sbcl добавить компиляцию asdf. Поставь common-lisp-conroller. Проверь. Может, после установки его какой-нибудь инсталляционный скрипт автоматически сборку ядра для sbcl начнет.

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

> То есть в /usr/share/common-lisp/source/asdf загнать asdf (такой > каталог используется в Debian) и все это дело дружно скомпилировать.

А можно поподробней "загнать asdf" ? и "и все это дело дружно скомпилировать" - вот это особенно поподробней, а то я скомпиляцию пока не очень асилил. Делал (load "asdf-install") из под root'a, но ничего не получилось... (/usr/share/common-lisp/source/asdf - есть такое, в какталоге asdf лежат 3 файла один из которых asdf-install.lisp)

anonymous
()
Ответ на: комментарий от Zubok

> Поставь common-lisp-conroller.

Я ж писал уже, sbcl тянет и common-lisp-conroller и asdf. Так что всё есть...

eraser
() автор топика
Ответ на: комментарий от anonymous

> То есть в /usr/share/common-lisp/source/asdf загнать asdf (такой > каталог используется в Debian) и все это дело дружно скомпилировать.

А можно поподробней "загнать asdf" ? и "и все это дело дружно скомпилировать" - вот это особенно поподробней, а то я скомпиляцию пока не очень асилил. Делал (load "asdf-install") из под root'a, но ничего не получилось... (/usr/share/common-lisp/source/asdf - есть такое, в какталоге asdf лежат 3 файла один из которых asdf-install.lisp)

anonymous (*) (17.11.2006 17:56:29) - что-то глюкануло :)

eraser (*) (17.11.2006 17:56:29)

eraser
() автор топика
Ответ на: комментарий от eraser

Скриптик /usr/lib/common-lisp/bin/sbcl.sh имеется? Если да (не помню, дебиановское это изобретение или нет) и запусти под рутом:

/usr/lib/common-lisp/bin/sbcl.sh install-clc

Этот скриптик должен автоматически скомпилировать common-lisp-controller и сохранить новый образ ядра в /usr/lib/sbcl. Такой скрипт в debian при инсталляциии запускается.

Zubok ★★★★★
()
Ответ на: комментарий от eraser

Если скриптик не имеется, то надо ручками-с. Порядок такой:

Заходишь под рутом. И пишешь:

# cd /usr/lib/sbcl

# /usr/bin/sbcl --core /usr/lib/sbcl/sbcl-dist.core --noinform --sysinit /etc/sbcl.rc --userinit /dev/null --load "/usr/lib/sbcl/install-clc.lisp" # 2> /dev/null

получишь ядро sbcl-new.core, которое надо переобозвать sbcl.core и записать в /usr/lib/sbcl:

# mv sbcl-new.core sbcl.core

Уходи в пользователя. И все. Теперь по умолчанию будет грузиться новое ядро. Там ADSF уже будет.

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

Поставил sbcl-0.9.17 - всё запускается, но опять lamda-gtk глючит:

sbcl
(require 'lambda-gtk-examples) - компилится нормально...

(hello-world)
; in: DEFUN HELLO-WORLD1
;     (G:CALLBACK DESTROY)
; ==>
;   (GTK::ALIEN-FUNCTION-SAP DESTROY)
; 
; caught STYLE-WARNING:
;   undefined function: GTK::ALIEN-FUNCTION-SAP

Определение ф-ции ALIEN-FUNCTION-SAP нигде в исходниках не нашёд.
Похоже её нет...
И как результат G:CALLBACK не подрубается... 

eraser
() автор топика
Ответ на: комментарий от eraser

Перезапустил sbcl... ща:

(require 'lambda-gtk)
; SLIME 2005-08-03
;;;; (require 'lambda-gtk) ...

Дальше компилю ф-цию hello-world:

READER-ERROR at 41 (line 2, column 18) on #<SB-IMPL::STRING-INPUT-STREAM {B0CA039}>:
The symbol "INIT-ENSURE" is not external in the GTK package.
   [Condition of type SB-KERNEL:READER-PACKAGE-ERROR]

Ф-ция из примера:

(defun hello-world1 ()
  (gtk:init-ensure) ; make sure gtk is initialized before calling api
  (let ((window (gtk:window-new gtk:window-toplevel)))
    (gtk:window-set-title window "FUCK")
    (gtk:window-set-default-size window 500 300)
    ....................................

Что делать ?

eraser
() автор топика
Ответ на: комментарий от eraser

Можно попробовать вместо (gtk:init-ensure) написать (gtk::init-ensure). Т.е. символ init-ensure не экспортирован из пакета gtk, можно к нему обратиться напрямую через двойное двоеточие ::

anonymous
()
Ответ на: комментарий от anonymous

> обратиться напрямую через двойное двоеточие ::

Да, действительно, ошибки исчезли, остались варнинги. Чтоб было понятней:
;;--------------------------------------------
(gtk::define-signal-handler destroy :void (widget data)
			   widget data
  ;(format t "delete-event ocurred~%")
  (gtk::main-quit))

(defun hello-world ()
  (gtk::init-ensure) ; make sure gtk is initialized before calling api
  (let ((window (gtk::window-new gtk::window-toplevel)))
    (gtk::window-set-title window "FUCK")
    (gtk::window-set-default-size window 500 300)
    (gtk::container-set-border-width window 50)
    (gtk::widget-show window)
    (g::signal-connect window "destroy" (g::callback destroy)
                      (g::nullptr))
    (gtk::main)))
Компилю:
-+  Warnings (3)
 |-- undefined variable: DESTROY
 |-- undefined variable: GTK::WINDOW-TOPLEVEL
 `-- These variables are undefined:
       DESTROY GTK::WINDOW-TOPLEVEL

Запускаю:
(hello-world)
The function GTK::INIT is undefined.
   [Condition of type UNDEFINED-FUNCTION]

Всё равно не работает :( Хотя хоть компилится уже...

eraser
() автор топика
Ответ на: комментарий от eraser

>-+  Warnings (3)
> |-- undefined variable: DESTROY
> |-- undefined variable: GTK::WINDOW-TOPLEVEL
> `-- These variables are undefined:
>       DESTROY GTK::WINDOW-TOPLEVEL

Это убил, поставив перед WINDOW-TOPLEVEL и DESTROY просто ":" (не знаю на скока это правильно...) .
Ошибка при исполнении всеравно осталась... Хотя странно - вроде ж скомпилилось всё...

eraser
() автор топика
Ответ на: комментарий от Zubok

Я слегка модифицировал страничку для lambda-gtk (изменил каталоги):

http://aroks.kiev.ua/pub/wiki/DokumentacijaPoLisp/BystrajaNastrojjkaBindingaL...

и кроме того, там добавилась ссылка для ручной настройки ASDF (для тех, кто таки захочет переехать на SBCL-0.9.18 в Gentoo):

http://aroks.kiev.ua/pub/wiki/DokumentacijaPoLisp/RuchnajaNastrojjkaASDF

eugine_kosenko ★★★
()
Ответ на: комментарий от eraser

> Что делать ?

Похоже, опять проблемы с версиями. Смотри, как выглядит тестовая
функция в моем примере:

;;;
;;; Example 1, Hello World

(gtk:define-signal-handler bye1 :void (widget data)
  widget data  ; stop unused var compiler nagging
  (format t "bye!~%")
  (gtk:main-quit))

(gtk:define-signal-handler delev1 :int (widget event data)
  widget event data
  (format t "delete-event ocurred~%")
  gtk:+false+)

(gtk:define-signal-handler hellomsg :void (widget data)
  widget data
  (format t "Hello world!~%"))

(defun hello-world ()
  (gtk:init-ensure) ; make sure gtk is initialized before calling api
  (let ((window (gtk:window-new gtk:window-toplevel))
        (button (gtk:button-new-with-label "Hello World!")))
    (gtk:container-add window button)
    (gtk:container-set-border-width window 10)
    (gtk:widget-show button)
    (gtk:widget-show window)
    (g:signal-connect button "clicked" (g:callback hellomsg)
                      (g:nullptr))
    (g:signal-connect window "delete-event" (g:callback delev1)
                      (g:nullptr))
    (g:signal-connect window "destroy" (g:callback bye1)
                      (g:nullptr))
    (gtk:main)))

; (hello-world)

Попробуй взять ее целиком. Ты используешь lambda-gtk из дистрибутива?
Если да, то там и в самом деле жутко кривой пакет. Я скачивал и ставил
оба пакета локально с рекомендованных ссылок. Все работает даже
сейчас:

* (require 'lambda-gtk-examples)

; loading system definition from /home/eugine/.sbcl/systems/lambda-gtk.asd into
; #<PACKAGE "ASDF0">
; registering #<SYSTEM #:LAMBDA-GTK {1002C4CED1}> as LAMBDA-GTK
; loading system definition from /home/eugine/.sbcl/systems/cffi.asd into
; #<PACKAGE "ASDF0">
; registering #<SYSTEM CFFI {10022F3B71}> as CFFI
NIL
* (hello-world)
Hello world!
Hello world!
Hello world!
delete-event ocurred
bye!
NIL

eugine_kosenko ★★★
()
Ответ на: комментарий от eugine_kosenko

Ты используешь lambda-gtk из дистрибутива?

Да. Ща поставил из рекомендованных ссылок lambda-gtk и cffi.

Делаю:

;;;; (require 'lambda-gtk-examples) ...
; compiling file "/usr/share/common-lisp/source/lambda-gtk/lambda-gtk-common.lisp" (written 17 DEC 2005 10:55:36 PM):

; compiling (IN-PACKAGE :LAMBDA-GTK)
The name "LAMBDA-GTK" does not designate any package.
   [Condition of type SB-KERNEL:SIMPLE-PACKAGE-ERROR]

eraser
() автор топика
Ответ на: комментарий от eraser

Вот ещё выдается:

CL-USER> (require 'lambda-gtk-examples)
; loading system definition from /home/xxx/.sbcl/systems/lambda-gtk.asd into
; #<PACKAGE "ASDF0">
; registering #<SYSTEM #:LAMBDA-GTK {ADB0081}> as LAMBDA-GTK
; compiling file "/usr/share/common-lisp/source/lambda-gtk/lambda-gtk-common.lisp" (written 17 DEC 2005 10:55:36 PM):
; compiling (IN-PACKAGE :LAMBDA-GTK)

The name "LAMBDA-GTK" does not designate any package.
   [Condition of type SB-KERNEL:SIMPLE-PACKAGE-ERROR]

eraser
() автор топика
Ответ на: комментарий от eraser

> Ща поставил из рекомендованных ссылок lambda-gtk и cffi.

Очень похоже, что не прописаны или неправильно прописаны asdf-ссылки.

Давай так:

1. Удали дистрибутивные пакеты cffi и lambda-gtk.

2. Разверни скачанные пакеты в домашнем каталоге (лучше всего там, где указано сейчас на странице).

3. Пропиши линки в ~/.sbcl/systems на развернутые пути.

Если не будет работать, то покажи

$ ls -l ~/.sbcl/systems

И вообще, если ты сейчас в Сети, то стукнись в аську 131787624 или джаббер Maverik@jabber.lafox.net или Maverik10031972@jabber.ru. Думаю, будет быстрее.

eugine_kosenko ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.