วิธีแก้ปัญหา: -bash:: ไม่สามารถเรียกใช้ไฟล์ไบนารี่ได้


18

ฉันมีไฟล์ชื่อ b1 ที่มีภาษาแอสเซมบลี ฉันพยายามเรียกใช้งานไฟล์บน OSX โดยใช้

$ ./b1

ฉันได้รับข้อผิดพลาดต่อไปนี้:

-bash: ./b1: cannot execute binary file

ฉันดูคำถามที่คล้ายกันอื่น ๆ แต่ก็ไม่มีประโยชน์ ฉันใช้สถาปัตยกรรม 64 บิตแน่นอน

นี่คือผลลัพธ์ของข้อมูลที่เกี่ยวข้อง:

$ file b1
b1: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, not stripped
$ uname -a
Darwin Anthonys-MacBook-Pro.local 13.0.0 Darwin Kernel Version 13.0.0: Thu Sep 19 22:22:27 PDT 2013; root:xnu-2422.1.72~6/RELEASE_X86_64 x86_64

แก้ไข:

Ran as b1ซึ่งจบลงด้วยการยุติด้วย: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/as: fatal error in /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../libexec/as/x86_64/as

คำตอบ:


25

ขออภัยไฟล์นี้มีไว้สำหรับ GNU / Linux

ตามที่คุณfileส่งออกโปรแกรมนี้เหมาะสำหรับ GNU / Linux ฉันรู้สิ่งนี้เพราะ:

  1. ไฟล์b1อยู่ในELFรูปแบบ (Extensible และ Linkable Format)ในขณะที่ Mac OS X ใช้Mach-Oรูปแบบสำหรับไบนารี
  2. fileรับรู้ว่าไฟล์นี้มีไว้สำหรับGNU/Linux 2.6.18หมายความว่ามันจะทำงานในการกระจาย Linux ที่ทันสมัยที่สุด

ในการแก้ปัญหาของคุณคุณต้องเรียกใช้ปัญหานี้ภายในการแจกจ่าย Linux, คอมไพล์โปรแกรมใหม่หรือรับโปรแกรม Mac เวอร์ชั่น X ของโปรแกรมนี้

ดังนั้น ... ทำไมไม่b1ทำงานกับXYZ OS หรือ CPU

เช่นเดียวกับที่ผู้คนพูดภาษาต่าง ๆ คอมพิวเตอร์ต่าง ๆ ก็เข้าใจคำแนะนำต่าง ตัวอย่างเช่น Mac ของคุณใช้โปรเซสเซอร์ Intel ในขณะที่โทรศัพท์ Android ของคุณใช้โปรเซสเซอร์ ARM เปรียบเทียบโปรเซสเซอร์ทั้งสองนี้กับภาษาอังกฤษและภาษาฝรั่งเศส พวกเขาอาจอยู่ในตระกูลภาษาเดียวกัน แต่ถึงกระนั้นคุณก็ไม่สามารถพูดได้ทั้งคู่ในเวลาเดียวกัน สิ่งนี้นำไปสู่ข้อสรุป:

"พูดคุย" คอมพิวเตอร์ที่แตกต่างกันในภาษาต่างๆ

สำหรับสาเหตุที่ระบบปฏิบัติการที่แตกต่างกัน (เช่น Windows, Mac OS X และ Linux) ไม่สามารถใช้ไบนารีเดียวกันได้ให้พิจารณาสิ่งนี้:

อะไรทำให้ซอฟต์แวร์แตกต่างจากฮาร์ดแวร์อย่างสิ้นเชิง? ไม่มาก.

ทั้งจัดหาระบบและ "ภาษา" ที่ช่วยให้ส่วนประกอบที่ซับซ้อนมากขึ้นของคอมพิวเตอร์สามารถทำงานให้ผู้ใช้ปลายทางได้ ทั้งสองต้องการภาษาที่ตกลงกันเพื่อทำงานให้เสร็จ ลองนึกภาพถ้ามี 10 คนในการแข่งขันตะโกนแต่ละคนพูดภาษาที่แตกต่างกัน นี่คือสาเหตุที่ซอฟต์แวร์ระบบปฏิบัติการที่แตกต่างกันต้องการไบนารีต่างกันแม้ว่าทั้งสองระบบปฏิบัติการจะใช้โปรเซสเซอร์เดียวกัน


สวัสดีฉันมีปัญหาคล้ายกันที่พยายามรวบรวมไฟล์ elf ใน Mac OS 10.9 คุณช่วยบอกฉันเกี่ยวกับวิธีการเรียกใช้ onmac นี้ได้อย่างไร
AllIsWell

AllsWell คุณพบวิธีนี้!
Neocortex

1

ภาษาประกอบ คุณต้องรวบรวมมันหรือรวบรวมมัน

man as

2
ถามดูเหมือนว่าจะมีแฟทต์ภาษาประกอบและรหัสเครื่อง ดูผลลัพธ์ของfileในคำถาม
JdeBP
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.