armel用Python 2.7.16(32ビット)クロスコンパイル

armel用Python 2.7.16(32ビット)クロスコンパイル

armelアーキテクチャを使用するデバイスがあり、ファイルシステムがVM(amd64アーキテクチャ)で実行されています。これは、デバイスにコンパイル要件をインストールするのに十分なスペースがないためです。オペレーティングシステムはDebian 9(拡張バージョン)です。

Pythonをダウンロードし、次の内容でconfig.siteファイルを作成します(他の回答で見つかりました)。

ac_cv_file__dev_ptmx=no
ac_cv_file__dev_ptc=no

そして私は逃げた./configure。最後に、次のようなさまざまなオプションがあります(他のフォーラムで見つけました)。

CONFIG_SITE=config.site ./configure --target=arm-linux --host=arm-linux-gnu "CFLAGS=-m32" "CXXFLAGS=-m32" "LDFLAGS=-m32" --build=armel --enable-ipv6

今私に必要なものは何ですか--[dis|en]able-ipv6

他の設定で動作すると動作し、make完了したら実行します。

checkinstall -D --install=no --fstrans=yes

実行が成功すると、armelアーキテクチャを使用する他のデバイスに.debパッケージをインストールしますが、実行するとpythonエラーが発生しますbash: /usr/local/bin/python: cannot execute binary file。理由を説明できますか?

修正する Debianパッケージをインストールした後、出力file /usr/local/bin/pythonシンボリックリンクはです/usr/local/bin/python2.7

python2.7: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, stripped

gccがx86-64でコンパイルされるのが正しいことを知りましたか?それとも交換する必要がありますか?では、どうすれば変更できますか?

コンパイルについてもっと知りたいです。詳細な回答を作成するか、回答にソースリンクを含めてください。

よろしくお願いします!

答え1

コンパイルはCなどの言語をCPU命令に翻訳する過程である。 CPU ごとに命令セットが異なります。 armelとx86_64の他のCPU言語だと思います。

すべての命令セット(言語)で作成できるコンパイラを作成することは技術的に可能ですが、直接切り替え可能なコンパイラはないと思います。

したがって、GCCを使用してarmel用にコンパイルするには、armel作成用にコンパイルされたGCCコピーが必要です。問題は次のとおりです。達成したい目標を達成するには、armel用にコンパイルするGCCコピーが必要ですが、そのGCCコピーはx86_64(コンパイルターゲット)で実行する必要があります。これをクロスコンパイラと呼びます。ある命令セットに対してコードをコンパイルし、使用時にそのコードを別の命令セットにコンパイルするコンパイラです。

必要なコンパイラはgcc-arm-linux-gnueabihttps://packages.debian.org/buster/gcc-arm-linux-gnueabi)。このインポートが# include <...>ヘッダーファイル(コンパイル失敗)またはライブラリ()にハングしていることがわかりますundefined reference to ...。残念ながら、これはあまりにも長い間実行されていないため、コンパイラにターゲットシステムのヘッダーとライブラリを使用するように指示する方法を実際に覚えていません。これはあなたが調査する必要があるかもしれません。

関連情報