Предотвращение ложного флага -m32 при запуске setup.py build_ext - PullRequest
0 голосов
/ 01 апреля 2020

Я пытаюсь кросс-компилировать numpy для руки (BeagleBone & RPi). Я работаю на Debian Buster с 32-битной кросс-компиляцией, включая библиотеки i386 (32-битные) и все необходимые наборы инструментов arm.

Когда я запускаю:

 export CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ AR=arm-linux-gnueabihf-ar RANLIB=arm-linux-gnueabihf-ranlib; \ 
 python3 setup.py build_ext --inplace

, я получаю следующее ошибка:

C compiler: arm-linux-gnueabihf-gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -m32 -I/usr/include/i386-linux-gnu/ -m32 -I/usr/include/i386-linux-gnu/ -fPIC
compile options: '-Inumpy/core/src/common -Inumpy/core/src -Inumpy/core -Inumpy/core/src/npymath -Inumpy/core/src/multiarray -Inumpy/core/src/umath -Inumpy/core/src/npysort -I/usr/local/include/python3.7m -c'
arm-linux-gnueabihf-gcc: _configtest.c
arm-linux-gnueabihf-gcc: error: unrecognized command line option ‘-m32’; did you mean ‘-mbe32’?

Я проследил через файл setup.py numpy и обнаружил, что в конечном итоге эти настройки, похоже, создаются в вызове distutils.core._setup_distribution.get_command_obj("build").

Ошибка Само собой разумеется, и попытка запустить команду без флагов -m32, кажется, работает правильно.

Редактировать: дальнейшее копание показало, что эти параметры поступают в сценарий сборки с помощью:

sysconfig.get_config_var("LDSHARED")

Я все еще в замешательстве, потому что следующее по-прежнему не работает:

$LDSHARED="gcc -pthread -shared" python3 -c "import sysconfig; print(sysconfig.get_config_var('LDSHARED'))"

gcc -pthread -shared -m32 -m32

1 Ответ

0 голосов
/ 02 апреля 2020

Оказывается, этот параметр LDSHARED исходит из Makefile, который использовался во время сборки самого хоста python. В большинстве сценариев ios имеет смысл иметь его таким образом, но комбинация кросс-компиляции и руки g cc, не принимающая этот флаг, делает его проблематичным c ...

Это может очень хорошо быть неразрешимым, и я вместо этого прибегаю к захвату параметра из самого g cc через скрипт symlink / bash.

...