Gcc

“-sh:無法執行二進製文件”,因為原始碼在“x86_64”上編譯並在“i686”平台上執行

  • November 27, 2018

我需要執行一些與 USB NCM 相關的測試案例,為此我在 .c 文件中編寫了一些測試程式碼。我已經使用 GCC 編譯器從 Ubuntu Host 編譯了 .c 文件並嘗試從設備的控制台執行,但我收到“-sh:無法執行二進製文件”錯誤。設備端我們沒有安裝 GCC。

uname -a 命令給出以下 o/p in,

> 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 文件。

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 手冊頁

引用自:https://unix.stackexchange.com/questions/484186