LINUX.ORG.RU

libpeas для встраиваемых систем

 , , , ,


0

2

Мне очень нравится libpeas, но есть одна проблема. Хочу использовать libpeas в embedded (целевая система имеет 16Mb NOR Flash). Казалось бы, в чём проблема?
А проблема в том, что в зависимостях у libpeas находится gobject-introspection, а у него в зависимостях питон.
Никакой питононенависти, но питон просто слишком жирный, чтобы влезть на целевую систему. К тому же, я попробовал его собрать, он собирался целый час и так и недособрался, потому что после установки половину скриптов выполнил, а на вторую половину ругнулся: ImportError: No module named _collections.
Вопрос в том, можно ли как-то исключить зависимость от питона? Или есть какой-то маленький интерпретатор для встраиваемых систем?

★★★★★

маленький интерпретатор для встраиваемых систем?

MicroPython?

zolden ★★★★★ ()

про всё связанное с gobject забудь, оно слишком толстое для встройки, по крайней мере той, где не используется nand или emmc. У тебя по результату просто места не останется.

MicroPython?

Оно вещь в себе. Как замена обычному питону маловероятно.

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

Сейчас у меня на девайсе есть glib с gobject'ом, cairo, pixman, ffi, libpng, zlib, tslib. Всё вместе занимает ~3.5Мб (и это без -Os). Так что пока места для моего приложения и его ресурсов предостаточно.

CYB3R ★★★★★ ()

А проблема в том, что в зависимостях у libpeas находится gobject-introspection, а у него в зависимостях питон.

Имхо gobject-introspection тут ни при чем.
У libpeas в зависимостях libgirepository-1.0-1, который от питона не зависит.
У libpeas есть сама по себе зависимость от libpython, но может можно собрать без питона и писать плагины на Си?

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

может можно собрать без питона и писать плагины на Си?

~/src/libpeas-1.18.0$ ./configure --disable-python2 --disable-python3 --disable-gtk | tail
        Build libpeas-gtk             : no
        Coverage testing              : no (disabled, use --enable-gcov to enable)
        Glade Catalog                 : no

Languages support:

        Lua 5.1 support               : no
        Python 2 support              : no (disabled, use --enable-python2 to enable)
        Python 3 support              : no (disabled, use --enable-python3 to enable)
Tayler ★★ ()
Ответ на: комментарий от Tayler

А вот и нет.

libpeas-1.18.0$ ./configure --host="mipsel-linux" --disable-python2 --disable-python3 --disable-luajit --disable-lua5.1

…

configure: error: Package requirements (
	glib-2.0 >= 2.38.0
	gobject-2.0 >= 2.38.0
	gmodule-2.0 >= 2.38.0
	gio-2.0 >= 2.32.0
	gobject-introspection-1.0 >= 1.39.0
) were not met:

No package 'gobject-introspection-1.0' found

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

А теперь снеси gobject-introspection-1.0.pc и запусти configure ещё раз. Получишь вывод, как у меня.

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

Логично, что он нужен для сборки (как минимум плагинов), чтобы вытянуть инфу о классах.
Но он не нужен на целевой машине: http://packages.ubuntu.com/ru/precise/libpeas-1.0-0
Т.е. нужно настроить кросс-компиляцию интроспекции. gobject-introspection использовать от инстурментальной машины, как компилятор (а это вокруг него обертка и есть по сути). Вангую много боли. Разработчики того же libpeas, очевидно, (а может разработчики и всего GI в целом) наверное даже не думали об этом.

Tayler ★★ ()
Последнее исправление: Tayler (всего исправлений: 1)
Ответ на: комментарий от Tayler

Воу, что-то это не так радужно, как я себе это представлял. Ладно, буду пробовать.

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

Хотя сейчас смотрю, в инете не один год немало дискуссий на тему кросс-компиляции GI, может и реально все это дело настроить.

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

Прикольно. У меня не лезло, но там софта напихано уже было под крышку и флеш 8 мегабайт.

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

Мне кажется, с точки зрения экономии места glib даже выгоднее всяких самописных костылей. И однозначно надёжнее.

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

Логично, что он нужен для сборки (как минимум плагинов), чтобы вытянуть инфу о классах. Но он не нужен на целевой машине

Подтверждаю. gobject-introspection зависит от питона, но от него runtime не зависит, и libgirepository - runtime, не зависящий от питона.

Для кросскомпиляции совершенно нормально, когда нужно запустить кое-какую прогу, чтобы она что-то сгенерировала. Нужно просто иметь качественные Makefile.am или как в GI хотя бы:

# GI_CROSS_LAUNCHER is the command to use for executing g-ir-compiler.
# Normally will be undefined but can be set (e.g. to wine or qemu)
# when cross-compiling
INTROSPECTION_COMPILER = \
    env PATH=".libs:$(PATH)" \
        $(GI_CROSS_LAUNCHER) \
        $(top_builddir)/g-ir-compiler$(EXEEXT)
т.е. просто установить переменную GI_CROSS_LAUNCHER в установленный нативный компилятор.

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

Например, gtk-update-icon-cache раньше использовался при сборке gtk. Для этого его компилили в native:

Хотя в итоге выкинули эту зависимость.

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

Значит, мне достаточно установить переменную GI_CROSS_LAUNCHER=qemu-mipsel, чтобы собрать всё?

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

Ну, вроде (я немного перепутал с INTROSPECTION_COMPILER).

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

Да не, странно всё это. Он всё-таки хочет питон для целевой платформы:

configure:15204: checking for headers required to compile python extensions
configure:15214: mipsel-linux-gcc -E  -I/usr/include/python2.7 -I/usr/include/x86_64-linux-gnu/python2.7 conftest.c
cc1: warning: include location "/usr/include/python2.7" is unsafe for cross-compilation [-Wpoison-system-directories]
cc1: warning: include location "/usr/include/x86_64-linux-gnu/python2.7" is unsafe for cross-compilation [-Wpoison-system-directories]
In file included from /usr/include/python2.7/Python.h:8:0,
                 from conftest.c:44:
/usr/include/python2.7/pyconfig.h:42:52: fatal error: mipsel-linux-gnu/python2.7/pyconfig.h: No such file or directory
compilation terminated.
configure:15214: $? = 1
configure: failed program was:

…

| #include <Python.h>
configure:15219: result: not found
configure:15221: error: Python headers not found

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

Так для компиляции, не для рантайма: ведь gobject-introspection нужно таки собрать. А вот копировать его на целевую ты уже не должен.

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

Что-то у меня так и не получилось собрать питон, с которым собрался бы gobject-introspection.
Python 2.7.12 говорит: ImportError: No module named _collections
Python 3.5.2 говорит: ImportError: No module named '_struct'
Что с ними не так?

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

может заняться физическим трудом? программирование это не ваше, там десять строчек соурса того кода, а столько шума

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

Ну давай, потролль меня в моём же топике. Где тут программирование увидел? Или всех, кто в монитор пялится и по клавиатуре стучит, программистами называешь?

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

Слишком мало инфы, чтобы понять что не так.

Погуглил я ещё на тему кросскомпиляции, и проясняется, что дизайн там убитый. Т.е. там не просто недописанные autotools скрипты, а принципиальная невозможность собрать без использования qemu/wine. Но так как по крайней мере у тебя есть qemu под твою целевую платформу, то считай повезло.

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

Ну я и пытаюсь qemu использовать, только пользы мало.

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