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

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

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

@Landgraf , в файле config.log много чего написано. Я можно сказать пока не понимаю что там и к чему. Я так понимаю не разобравшись с этими логами дальше не продвинутся у меня дела ?
Может подскажете тогда что можно почитать про кросс-компиляцию?

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

файле config.log много чего написано

Так найди нужное место. Там рядом будет продублировано такое же сообщение от configure, и вообще оно будет в конце портянки с вызовами команд, сразу перед портянкой с переменными.

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

@slovazap , я думаю пока интересна вот эта часть файла config.log?:

This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.

It was created by python configure 3.5, which was
generated by GNU Autoconf 2.69.  Invocation command line was

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

## --------- ##
## Platform. ##
## --------- ##

hostname = rashid-VirtualBox
uname -m = i686
uname -r = 3.13.0-32-generic
uname -s = Linux
uname -v = #57~precise1-Ubuntu SMP Tue Jul 15 03:50:54 UTC 2014

/usr/bin/uname -p = unknown
/bin/uname -X     = unknown

/bin/arch              = unknown
/usr/bin/arch -k       = unknown
/usr/convex/getsysinfo = unknown
/usr/bin/hostinfo      = unknown
/bin/machine           = unknown
/usr/bin/oslevel       = unknown
/bin/universe          = unknown

PATH: /usr/lib/lightdm/lightdm
PATH: /usr/local/sbin
PATH: /usr/local/bin
PATH: /usr/sbin
PATH: /usr/bin
PATH: /sbin
PATH: /bin
PATH: /usr/games


## ----------- ##
## Core tests. ##
## ----------- ##

configure:2921: checking build system type
configure:2935: result: x86_64-pc-linux-gnu
configure:2955: checking host system type
configure:2968: result: x86_64-pc-linux-gnu
configure:2998: checking for python3.5
configure:3028: result: no
configure:2998: checking for python3
configure:3028: result: no
configure:2998: checking for python
configure:3014: found /usr/bin/python
configure:3025: result: python
configure:3125: checking for --enable-universalsdk
configure:3172: result: no
configure:3195: checking for --with-universal-archs
configure:3210: result: no
configure:3360: checking MACHDEP
configure:3566: result: linux
configure:3587: checking for --without-gcc
configure:3610: result: no
configure:3613: checking for --with-icc
configure:3633: result: no
configure:3717: checking for x86_64-linux-gnu-gcc
configure:3744: result: arm-linux-gnueabihf-gcc
configure:4013: checking for C compiler version
configure:4022: arm-linux-gnueabihf-gcc --version >&5
./configure: line 4024: arm-linux-gnueabihf-gcc: command not found
configure:4033: $? = 127
configure:4022: arm-linux-gnueabihf-gcc -v >&5
./configure: line 4024: arm-linux-gnueabihf-gcc: command not found
configure:4033: $? = 127
configure:4022: arm-linux-gnueabihf-gcc -V >&5
./configure: line 4024: arm-linux-gnueabihf-gcc: command not found
configure:4033: $? = 127
configure:4022: arm-linux-gnueabihf-gcc -qversion >&5
./configure: line 4024: arm-linux-gnueabihf-gcc: command not found
configure:4033: $? = 127
configure:4053: checking whether the C compiler works
configure:4075: arm-linux-gnueabihf-gcc    conftest.c  >&5
./configure: line 4077: arm-linux-gnueabihf-gcc: command not found
configure:4079: $? = 127
configure:4117: result: no
configure: failed program was:
| /* confdefs.h */
| #define _GNU_SOURCE 1
| #define _NETBSD_SOURCE 1
| #define __BSD_VISIBLE 1
| #define _BSD_TYPES 1
| #define _DARWIN_C_SOURCE 1
| #define _XOPEN_SOURCE 700
| #define _XOPEN_SOURCE_EXTENDED 1
| #define _POSIX_C_SOURCE 200809L
| /* end confdefs.h.  */
| 
| int
| main ()
| {
| 
|   ;
|   return 0;
| }
configure:4122: error: in `/home/rashid/Python-3.5.5':
configure:4124: error: C compiler cannot create executables
See `config.log' for more details

## ---------------- ##
## Cache variables. ##
## ---------------- ##

ac_cv_build=x86_64-pc-linux-gnu
.......................
rashid_s ()
Ответ на: комментарий от rashid_s

в логах буквально в самом начале написано
./configure: line 4024: arm-linux-gnueabihf-gcc: command not found
попробуй после того как установил, перелогиниться. Если не поможет, смотри почему не находит arm-linux-gnueabihf-gcc

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

@Landgraf , я инсталлировал arm-linux-gnueabihf-gcc, но компиляция все равно пока не получается. Хотя сообщение выдаваемое командной строкой немного другое теперь.

checking build system type... x86_64-pc-linux-gnu
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... yes
checking for C compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... configure: error: in `/home/rashid/Python-3.5.5':
configure: error: cannot run C compiled programs.
If you meant to cross compile, use `--host'.

Файл config.log я выложил по ссылке https://pastebin.com/VTq3kDLW (там я на всякий случай переименовал файл как config_1).

Теперь судя по логам вместо «…arm-linux-gnueabihf-gcc: command not found» пишется сообщение «arm-linux-gnueabihf-gcc: fatal error: no input files». То есть каких-то входных файлов (данных) не хватает?

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

Заранее благодарен за помощь.

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

Теперь судя по логам вместо «…arm-linux-gnueabihf-gcc: command not found» пишется сообщение «arm-linux-gnueabihf-gcc: fatal error: no input files». То есть каких-то входных файлов (данных) не хватает?

Нет, это ошибка не в этом, а здесь:

configure:4212: ./conftest
./configure: line 4214: ./conftest: cannot execute binary file

Что-то ты неправильно кросс-компилируешь. Потому что получается, что ./conftest скомпилировался под arm, а запускается на x86_64. Возможно флаги build/host/target неправильно расставил.

EXL ★★★★★ ()
Ответ на: комментарий от 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

@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)
Ответ на: комментарий от zudwa

@zudwa , попытался повторить Ваш подвиг (только на Ubuntu 12 в виртуалке)

rashid@rashid-VirtualBox:~/Python-3.5.5$ CONFIG_SITE=config.site ./configure --host=arm-linux-gnueabihf --prefix=$HOME/PythonSrc/PythonTarget --build=x86_64-linux-gnu --disable-ipv6
configure: loading site script ./config.site
checking build system type... x86_64-pc-linux-gnu
checking host system type... arm-arago-linux-gnu
checking for python3.5... no
checking for python3... no
checking for python... python
checking for python interpreter for cross build... configure: error: python3.5 interpreter not found

Теперь получается компилятор не может найти питоновский интерпретатор?

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 ()
Ответ на: комментарий от 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 ★★★★★ ()
Ответ на: комментарий от 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 ()