Невозможно кросс-компилировать Python-2.7.18 для x86, uclibc

Я пытаюсь кросс-компилировать Python 2.7.18 для машины x86, uclibc, используя пример набора инструментов crosstool-ng. Используемые команды следующие:

CONFIG_SITE=config.site CC=/home/msainz/x-tools/x86_64-unknown-linux-uclibc/bin/x86_64-unknown-linux-uclibc-gcc CXX=/home/msainz/x-tools/x86_64-unknown-linux-uclibc/bin/x86_64-unknown-linux-uclibc-g++ AR=/home/msainz/x-tools/x86_64-unknown-linux-uclibc/bin/x86_64-unknown-linux-uclibc-ar RANLIB=/home/msainz/x-tools/x86_64-unknown-linux-uclibc/bin/x86_64-unknown-linux-uclibc-ranlib READELF=/home/msainz/x-tools/x86_64-unknown-linux-uclibc/bin/x86_64-unknown-linux-uclibc-readelf LDFLAGS="-L/home/msainz/Projects/Selene/WP3/local/uclibc/base_rootfs/lib -L/home/msainz/Projects/Selene/WP3/local/uclibc/base_rootfs/usr/lib" CFLAGS="-I/home/msainz/Projects/Selene/WP3/local/uclibc/base_rootfs/usr/include -I/home/msainz/Projects/Selene/WP3/local/uclibc/base_rootfs/include" CPPFLAGS="-I/home/msainz/Projects/Selene/WP3/local/uclibc/base_rootfs/usr/include -I/home/msainz/Projects/Selene/WP3/local/uclibc/base_rootfs/include" ./configure --enable-shared --host=x86_64-unknown-linux-uclibc --build=x86_64 --disable-ipv6 --prefix=/home/msainz/Projects/python2_top_uclibc/

с последующим

PATH=$PATH:/home/msainz/Projects/python2_top_glibc/bin/ make

и

PATH=$PATH:/home/msainz/Projects/python2_top_glibc/bin/ make install

Выполнение завершается следующей ошибкой:

fi /home/msainz/x-tools/x86_64-unknown-linux-uclibc/bin/x86_64-unknown-linux-uclibc-gcc -L/home/msainz/Projects/Selene/WP3/local/uclibc/base_rootfs/lib -L/home/msainz/Projects/Selene/WP3/local/uclibc/base_rootfs/usr/lib -Xlinker -export-dynamic -o python \ Modules/python.o \ -L. -lpython2.7 -ldl -lpthread -lm _PYTHON_PROJECT_BASE=/home/msainz/Projects/Python-2.7.18 _PYTHON_HOST_PLATFORM=linux2-x86_64 PYTHONPATH=./Lib:./Lib/plat-linux2 python -S -m sysconfig --generate-posix-vars ;\ if test $? -ne 0 ; then \ echo "generate-posix-vars failed" ; \ rm -f ./pybuilddir.txt ; \ exit 1 ; \ fi python: error while loading shared libraries: libc.so.0: cannot open shared object file: No such file or directory generate-posix-vars failed make: *** [Makefile:523: pybuilddir.txt] Error 1

python2_top_glibc содержит предыдущую установку Python-2.7.18, но для нативной glibc, которая была скомпилирована идеально. libc.so.0 на самом деле находится в base_rootfs целевой системы, которая линкуется на этапе ./configure. Я застрял на этом в данный момент. Любая подсказка будет оценена. Любая дополнительная информация будет предоставлена ​​по запросу.

Заранее спасибо.


person m.dorian    schedule 19.11.2020    source источник
comment
Пожалуйста, форматируйте сообщения таким образом, чтобы они не были объединены в одну длинную строку.   -  person n. 1.8e9-where's-my-share m.    schedule 19.11.2020


Ответы (1)


python: невозможно открыть общий объектный файл: нет такого файла или каталога

Это ошибка загрузчика во время выполнения. Вы пытаетесь запустить исполняемый файл python, связанный с этим libc.so.0.

Если этот исполняемый файл действительно может работать в вашей хост-среде, вы можете включить его, добавив свою библиотеку base_rootfs в LD_LIBRARY_PATH. В противном случае вам нужно использовать исполняемый файл Python хоста на этом этапе процесса сборки или вообще отключить его.

person n. 1.8e9-where's-my-share m.    schedule 19.11.2020
comment
Но, насколько я понимаю, исполняемый файл python, который пытается запустить, — это тот, который компилируется. Исполняемый файл в PATH связан с libc.so.6, я проверил. Если я добавлю путь libc.so.0 к LD_LIBRARY_PATH, произойдет другая ошибка: python: Relink `/home/msainz/x-tools/x86_64-unknown-linux-uclibc/x86_64-unknown-linux-uclibc/sysroot/lib/libc.so.0' with `/lib/x86_64-linux-gnu/libc.so.6' for IFUNC symbol `stpcpy' Segmentation fault (core dumped) - person m.dorian; 19.11.2020
comment
@m.dorian m.dorian исполняемый файл python, который пытается запустить, компилируется. Да, это именно то, что я имею в виду. Исполняемый файл в PATH связан с libc.so.6 Возможно, вы захотите запустить его вместо этого. возникает другая ошибка. Возможно, ваш исполняемый файл кросс-сборки python вообще не может работать на вашем хост-компьютере, я понятия не имею, что может или не может делать кросс-сборка uclibc. Сообщения, содержащие символ IFUNC, доступны для поиска в Google, но я не пытался их исследовать. - person n. 1.8e9-where's-my-share m.; 19.11.2020
comment
Возможно, попробуйте добавить свой sysroot/lib и запустить ldd python в скомпилированном исполняемом файле. Вы не должны получать какие-либо общие библиотеки хоста на выходе. Если вы их получите, вам также нужно будет сделать эти библиотеки перекрестными и добавить их в LD_LIBRARY_PATH. Хотя это не гарантия чего-либо. - person n. 1.8e9-where's-my-share m.; 19.11.2020