LINUX.ORG.RU

Помогите собрать libpython правильно.

 


0

1

Вот уже пошел второй месяц моему неосиляторству. Есть некий хелловорлд (http://pastebin.com/rCP0s8Qa если кому интересно, но лучше туда не смотреть), который отлично линкуется и работает с дистрибутивным libpython2.6-2.7, никаких варнингов и все хорошо.

Но, как гласит инструкция на сайте http://mdqinc.com/blog/2011/09/cross-compiling-python-for-android/, иногда вы просыпаетесь и понимаете, что у вас недостаточно проблем в жизни и вы решаете собрать питон самостоятельно, чем я и занялся. Правда пока все это происходит на linux x86, до андроида я пока не дошел.

Типичная попытка сборки выглядит так:

wget https://www.python.org/ftp/python/2.6.9/Python-2.6.9.tgz
tar xvf Python-2.6.9.tgz;cd Python...;
./configure --prefix=/peezdon;make;make install
Перепробована куча различных версий, все собирается и вроде даже работает (я правда не могу понять, откуда у меня на линуксе может найтись sunaudiodev), но при линковке надо указать кучу дополнительных библиотек, чего в случае в дистрибутивным питоном не наблюдается, но на всякий случай
# /peezdon/bin/python-config --includes
-I/peezdon/include/python2.6 -I/peezdon/include/python2.6
# /peezdon/bin/python-config --libs
-lpthread -ldl -lutil -lm -lpython2.6
Иногда уже при линковке появляется куча варнингов, но в целом все собирается, однако при запуске выдается что-то вроде
LOG: Traceback (most recent call last):
LOG:   File "youtube-dl", line 15, in <module>
LOG:   File "youtube_dl/__init__.py", line 61, in <module>
LOG:
LOG: import io
LOG:   File "/peezdon/lib/python2.6/io.py", line 63, in <module>
LOG:
LOG: import _fileio
LOG: ImportError :
LOG: /peezdon/lib/python2.6/lib-dynload/_fileio.so: undefined symbol: PyFloat_Type
Очевидно, что оно пытается подгрузить _fileio.so, где и нарывается на PyFloat_Type. Или любой другой символ, я уже забыл все вариации ошибок. На всякий случай замечу, то проблем с юникодом, о которой пишут в гугле, у меня ни разу не было (пока).

В свою очередь PyFloat_Type точно определен и находится в floatobject.o, если слинковаться до кучи еще и с ним, то разумеется получаем:

/peezdon/lib/python2.6/config//libpython2.6.a(floatobject.o):/Python-2.6.9/Objects/floatobject.c:64: first defined here

Конечно оно уже определено, а ты что, раньше не видело?

ЧТО ОНО ОТ МЕНЯ ХОЧЕТ? Пишу тебе, дорогая Катерина Матвеевна, как к последней инстанции, Я ХОЧУ К МАМЕ УЖЕ.

А вообще хотелось бы собрать его единым монолитом, вкомпилив внутрь все-все модули и зависимости, embedded во все поля. Реквестирую мануалов, а то второй месяц идет, я в депрессии и печали, с горя смотрю на сборки вроде sl4a/kivy и подобные сборки питона от Vasyan666, чего очень не хочу.

Читал по диагонали, и не знаю особенностей сборки питона, но, в нормальных дистриубтивах кроме бинарного пакета ещё есть пакет с исходниками, содержащий помимо исходников и патчей ещё и команды для компиляции/сборки. Туда смотрели?

mky ★★★★★
()

Я правильно понимаю, что собраный Python работает правильно? Что за варнинги при линковке? Может стоит на них обратить внимание?

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

Да, собраный питон работает корректно. Варнинги точно не назову, сейчас собирается все без них (на 2.7.3), но на ошибку в рантайме это не влияет. В лучшем случае, ошибка будет не в fileio, а каком-нибудь gzip

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