"-sh: バイナリを実行できません。"ソースコードが「x86_64」でコンパイルされ、「i686」プラットフォームで実行されたために発生します。

"-sh: バイナリを実行できません。"ソースコードが「x86_64」でコンパイルされ、「i686」プラットフォームで実行されたために発生します。

いくつかのUSB NCM関連のテストケースを実行する必要があり、いくつかのテストコードが.cファイルに書き込まれました。 GCCコンパイラを使用してUbuntuホストで.cファイルをコンパイルし、デバイスコンソールで実行しようとしましたが、「-sh:バイナリを実行できません」エラーが発生しました。デバイス側にはGCCは設置されていません。

uname -a コマンドは、次の o/p を提供します。

> Host:

    4.4.0-31-generic Ubuntu x86_64

> Device:

    3.14.55-yocto-standard #1 SMP PREEMPT Fri Oct 12 13:34:50 CEST 2018 i686 GNU/Linux

私はホストとデバイスの間に環境の違いがあることを理解しています。とにかく、デバイス側のコンソールで.cファイルをコンパイルして実行する必要があります。

答え1

x86_64とi686命令セットは異なります(詳しくは)。

ホストシステムでソースコードをコンパイルするには、次のコマンドを使用します。

 gcc -m32 -mtune=i686 source.c -o source  

このようなエラーが発生した場合、fatal error: *.h : No such file or directory適切なクロスコンパイルライブラリがないことを意味します。

 sudo apt install g++-multilib

gcc コマンドを再実行してください。

引用:

GCCのマニュアルページ

関連情報