So kompilieren Sie Python 3.6 für den Raspberry Pi

7

Ich versuche, Python 3.6 für meinen Raspberry Pi basierend auf den Anweisungen in diesem Beitrag zu kompilieren.

export CC=arm-bcm2708hardfp-linux-gnueabi-gcc export LD=arm-bcm2708hardfp-linux-gnueabi-ld export CXX=arm-bcm2708hardfp-linux-gnueabi-g++ export CPP="arm-bcm2708hardfp-linux-gnueabi-g++ -E" export READELF=arm-bcm2708hardfp-linux-gnueabi-readelf export RANLIB=arm-bcm2708hardfp-linux-gnueabi-ranlib export AR=arm-bcm2708hardfp-linux-gnueabi-ar
echo ac_cv_file__dev_ptmx=no > ./config.site
echo ac_cv_file__dev_ptc=no >> ./config.site
CONFIG_SITE=config.site ./configure --prefix=/home/user/Downloads/Python-3.6.1 --enable-ipv6 --build=arm-unknown-linux-gnueabihf --host=arm-unknown-linux-gnueabihf
make -j4
make install

Ich stecke jedoch bei dem configureBefehl fest, der mit einem Fehler beendet wird, der besagt:

checking whether we are cross compiling... configure: error: in `/home/user/Downloads/Python-3.6.1':
configure: error: cannot run C compiled programs.
If you meant to cross compile, use `--host'.
See `config.log' for more details

Was mache ich falsch? Mein Host-Computer ist Fedora 25 x86_64 und mein Raspberry PI ist ein Modell 3 B.

arielnmz
quelle
1
Gibt es einen bestimmten Grund, warum Sie dies tun müssen, anstatt das python36Paket zu verwenden, das bereits in Fedora 24 und höher verfügbar ist?
Mattdm
Nun, ich war mir nicht bewusst, dass dies getan werden könnte. Es wäre großartig, wenn Sie die Schritte dazu in einer Antwort detailliert beschreiben könnten.
Arielnmz
Auf dem Pi,sudo dnf install python36
mattdm
Dies ist jedoch keine allgemeine Antwort, da es viel einfacher ist als Cross-Compilieren!
Mattdm
1
Sie können nicht einfach auf raspbian sudo dnf verwenden, zum einen basiert es auf Debian und verwendet Eignung. Sie gehen davon aus, dass ich Fedora oder sogar Pidora oder FedBerry verwende. Ich muss Python3.6 auf Raspbian ausführen.
Arielnmz

Antworten:

1

Die Anweisungen in diesem Github-Wiki haben es für mich getan:

CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ AR=arm-linux-gnueabihf-ar \
    RANLIB=arm-linux-gnueabihf-ranlib \
    ./configure --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf \
    --build=x86_64-linux-gnu --prefix=$HOME/rapsberry/depsBuild/python \
    --disable-ipv6 ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no \
    ac_cv_have_long_long_format=yes --enable-shared
make HOSTPYTHON=$HOME/raspberry/depsBuild/pythonhost/python \
    BLDSHARED="arm-linux-gnueabihf-gcc -shared" CROSS-COMPILE=arm-linux-gnueabihf- \
    CROSS_COMPILE_TARGET=yes HOSTARCH=arm-linux BUILDARCH=arm-linux-gnueabihf

Wie Sie sehen, habe ich den Teil über das Kompilieren von PGen absichtlich weggelassen und auch die HOSTPGEN-Envvar weggelassen, und die Kompilierung wurde korrekt abgeschlossen. Alles, was ich tun musste, war, das Altinstall-Ziel mit einem Zielpräfix wie diesem zu erstellen (ich habe diesen letzten Schritt ausgeführt aus dieser Anleitung zum Cross-Compilieren von Python 2):

make altinstall HOSTPYTHON=$HOME/raspberry/depsBuild/pythonhost/python \
    BLDSHARED="arm-linux-gnueabihf-gcc -shared" CROSS-COMPILE=arm-linux-gnueabihf- \
    CROSS_COMPILE_TARGET=yes HOSTARCH=arm-linux BUILDARCH=arm-linux-gnueabihf \
    prefix=$HOME/Python-3.6-rpi/_install

Und schließlich kopieren Sie den Inhalt des Verzeichnisses _install auf das Zielgerät (für mich war der Zielpfad unter / usr /).

arielnmz
quelle
Danke dafür. Wenn Sie Ihre eigene Antwort akzeptieren, wird dies anderen in Zukunft helfen
Mawg sagt, dass Monica am
-1

Anhand Ihres Beispiels würde ich versuchen, aus dem Python-Quellordner:

echo ac_cv_file__dev_ptmx = no> ./config.site
echo ac_cv_file__dev_ptc = no >> ./config.site
CONFIG_SITE = config.site ./configure --build = i386-linux --host = arm-bcm2708hardfp-linux-gnueabi --target = arm-bcm2708hardfp-linux-gnueabi

machen
Nelstaar
quelle
Ich habe es nicht versucht, aber 1. können Sie erläutern, warum sich der Build-Parameter von arm-unknown-linux-gnueabihfzu ändern sollte i386-linux? 2. Soll ich verwenden x86_64-linuxoder amd64-linuxfalls ich auf einem 64-Bit-Computer bin? 3. Was ist der Unterschied zwischen arm-unknown-linux-gnueabihfund arm-bcm2708hardfp-linux-gnueabi?
Arielnmz
@arielnmz 1. Der Parameter --build gibt die Plattform an, mit der Sie erstellen, und legt sie entsprechend fest. 2. x86_64-linux hat auch bei mir funktioniert 3. Hier ist das Präfix Ihrer
Toolkette
Ich werde es so
schnell