LINUX.ORG.RU

Кросс-компиляция Python3 в Ubuntu 12 для ARM

 ,


1

1

Пытаюсь сделать кросс-компиляцию Python 3.5.5 на Ubuntu 12 (в виртуалбокс), чтобы потом перенести на промышленный контроллер (в котором Линукс). Инструкция по вот этой ссылке - http://idiip.jiinii.com/cross-compile-python-3.html. При выполнении ./configure --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf --build=x86_64-linux-gnu --prefix=$HOME/PythonSrc/PythonTarget --disable-ipv6 --enable-shared командная строка выдает такое сообщение:

checking host system type... x86_64-pc-linux-gnu
checking for python3.5... no
checking for python3... no
checking for python... python
checking for --enable-universalsdk... no
checking for --with-universal-archs... no
checking MACHDEP... linux
checking for --without-gcc... no
checking for --with-icc... no
checking for x86_64-linux-gnu-gcc... arm-linux-gnueabihf-gcc
checking whether the C compiler works... no
configure: error: in `/home/rashid/Python-3.5.5':
configure: error: C compiler cannot create executables
See `config.log' for more details

Опыта немного у меня. Помогите разобраться.

Ответ на: комментарий от rashid_s

И еще смутило последнее сообщение «If you meant to cross compile, use `–host’.» (110-я строка файла config_1). Я же использую уточнение «–host=x86_64-linux-gnu», на что он ругается?

Да, именно так. Посмотри как по инструкции в твоей же ссылке:

./configure --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf --build=x86_64-linux-gnu ...

Дело в том, что сборочная система Autotools настолько тупая, что хостом она при кросс-компиляции считает целевую машину, а не ту, на которой ты компилируешь.

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

Дело в том, что сборочная система Autotools настолько тупая, что хостом она при кросс-компиляции считает целевую машину, а не ту, на которой ты компилируешь.

почему тупая, в документации прямо сказано, что host - это машина ДЛЯ которой ты компилируешь

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

что host - это машина ДЛЯ которой ты компилируешь

Интересно, какие наркотики употребляли те, кто проектировал Autotools. Хотя… где проектирование и где Autootools.

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

хост хостит программу, которую мы компилируем, всё логично :)

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

@EXL , я такую команду даю:

./configure --host=x86_64-linux-gnu --target=arm-linux-gnueabihf --build=x86_64-linux-gnu --prefix=/home/rashid/PythonSrc/PythonTarget --disable-ipv6 --enable-shared

В моем понимании что «–host» это машина на которой делается кросс-компиляция (хотя чем тогда является «–build» ?).

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

В моем понимании что «–host» это машина на которой делается кросс-компиляция (хотя чем тогда является «–build» ?).

Наше с вами понимание (общепринятое) идёт вразрез с наркоманским пониманием сборочной системы Autotools, где host это ваш ADAM-3600.

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

@EXL , таки (немного «курнув» чего нить) придется задавать:

./configure --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf --build=x86_64-linux-gnu ...

???

P.s.: бред конечно )))

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

@EXL , если анализировать config.log (https://pastebin.com/Zf19gBFt), строки 51-54, то он ищет сначало Питон3.5, результат - no, затем ищет Питон3, результат тоже ноу. А потом он находит Питон2.7 (который в Убунте по умолчанию), понимает что он (интерпретатор версии 2.7) не подходит и говорит

checking for python interpreter for cross build...
configure: error: python3.5 interpreter not found

Как то ему надо в PATH чтоли прописать? Опять же у меня нету установленной версии Питона3.5 на убунте

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

Сделай ./configure --help и смотри, что и куда нужно подставлять, чтобы нашёлся кастомный Python.

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

@EXL , @zudwa , в конце выполнения последней команды «make install» выдало сообщение

Requirement already up-to-date: setuptools in /home/rashid/PythonSrc/PythonHost/lib/python3.5/site-packages
Requirement already up-to-date: pip in /home/rashid/PythonSrc/PythonHost/lib/python3.5/site-packages

Что это означает ?

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

Очевидно, что пакеты setuptools и pip уже обновлены до нужной версии.

P.S. после make install сборка завершается и python устанавливается туда, куда ты ему приказал.

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

@EXL , по инструкции которой я делал - http://idiip.jiinii.com/cross-compile-python-3.html , написано что «Now we get cross-compiled Python in $HOME/PythonSrc/PythonTarget/» . То есть я беру папку PythonTarget из виртуальной Убунты и «несу» в контроллер ?

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

@EXL , таки получилось у меня значит !!! Действительно надо было в патче прописать путь поиска интерпретатора.

Спасибо огромное за помощь

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

@EXL , а как скомпилированный пакет теперь разместить в промышленном контроллере в операционной системе? Можете посоветовать где и что почитать ?

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

Зависит от того, какая у вас там опеационная система. В идеале – сделать под неё пакет.

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

@EXL , дак я для нее и делал кросскомпиляцию. Потому как там по умолчанию нету Python. Линукс там стоит. И разработчики рекомендовали использовать Ubuntu для кросс-компиляции.

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

я для нее и делал кросскомпиляцию

Для «неё» это для кого?

Линукс там стоит.

Линукс стоит и на Android’ах, и в прошивках самых разных роутеров. Я клоню к тому, что это только ядро.

Вам нужно ответить на вопрос что именно за дистрибутив Linux’а установлен на вашем промышленном девайсе и уже исходя из этого смотреть какая там предпочтительная форма распространения ПО.

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

@EXL , вот что я увидел в промышленном контроллере:

root@adam3600:~# cat /proc/version
Linux version 3.12.10-rt15-ti2013.12.01 (root@abjenkins-linux-x64) (gcc version 4.7.3 20130226 (prerelease) (crosstool-NG linaro-1.13.1-4.7-2013.03-20130313 - Linaro GCC 2013.03) ) #9 PREEMPT RT Thu Jan 31 17:02:38 CST 2019

Это получается Линукс специально разработанный для встраиваемых систем?

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

Да, судя по RT – это Linux со специальными RealTime патчами. Возможно там вообще нет никакой пакетной системы и менеджера. В этом случае распространяйте каталог со скомпилированным Python 3 в обычном tar.gz архиве.

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