簡體   English   中英

無法執行二進制文件:在 WSL 環境中編譯的二進制文件的 Exec 格式錯誤

[英]cannot execute binary file: Exec format error for a binary compiled in WSL environment

我最近開始研究 WSL 環境。 我在 WSL 環境中編譯了一個類型為“ELF 64 位 LSB 共享對象”的程序,但是當我嘗試在同一環境中運行它時,它會拋出錯誤“無法執行二進制文件:Exec 格式錯誤”。

我不確定我在這里缺少什么。 我怎樣才能運行二進制文件。 請建議。

kshitij@APL-5CD010D2WP:~/runtime/bin$ ioc_broker &
[1] 3579
kshitij@APL-5CD010D2WP:~/runtime/bin$ bash: /bin/ioc_broker: cannot execute binary file: Exec format error
^C
[1]+  Exit 126                ioc_broker
kshitij@APL-5CD010D2WP:~/runtime/bin$ file ioc_broker 
ioc_broker: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=aa1e76d798d46d45f131cb53de8f947ddb4c8526, for GNU/Linux 3.2.0, not stripped
kshitij@APL-5CD010D2WP:~/runtime/bin$ uname -srv
Linux 5.10.102.1-microsoft-standard-WSL2 #1 SMP Wed Mar 2 00:30:59 UTC 2022
kshitij@APL-5CD010D2WP:~/runtime/bin$ 

kshitij@APL-5CD010D2WP:/mnt/d/src/myproject/build$ uname -a
Linux APL-5CD010D2WP 5.10.102.1-microsoft-standard-WSL2 #1 SMP Wed Mar 2 00:30:59 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

我已經使用 cmake 編譯了二進制文件,其中我沒有指定任何關於正在使用的編譯器的具體信息。

kshitij@APL-5CD010D2WP:/mnt/d/src/myproject/build$ cmake -DCMAKE_INSTALL_PREFIX=/home/kshitij/runtime ..
-- The CXX compiler identification is GNU 9.4.0
-- Check for working CXX compiler: /bin/c++
-- Check for working CXX compiler: /bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Line: 57 Using COMMON_API_VERSION 3.1.12

uname -srv
Linux 5.10.102.1-microsoft-standard-WSL2 #1 SMP Wed Mar 2 00:30:59 UTC 2022

嘗試uname -a代替。 它應該將 kernel 標識為i686x86_64

我希望您的 kernel 顯示i686 ,在這種情況下,您已經安裝了 32 位 WSL2 並試圖在其上運行 64 位二進制文件。 這顯然行不通——您需要 64 位 kernel 才能運行 64 位二進制文件。

更新:

我看到 x86_64

好吧,我的猜測是錯誤的。 Exec format error的另一個原因是文件以某種方式損壞。

一種可能的損壞原因是磁盤空間不足並且文件被截斷。 檢查df -h. output 如果空間很大,請嘗試重新構建二進制文件。

也可以試試eu-readelf -a ioc_broker —— eu-readelf擅長警告損壞的 ELF 文件。

最后,在/var/log/messages中查找任何 kernel 警告——您可能有壞磁盤塊或其他東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM