Cách giải quyết: -bash :: không thể thực thi tệp nhị phân


18

Tôi có một tập tin tên b1 có chứa ngôn ngữ lắp ráp. Tôi đang cố gắng thực thi tệp trên OSX bằng

$ ./b1

Tôi nhận được lỗi sau đây:

-bash: ./b1: cannot execute binary file

Tôi đã xem xét các câu hỏi tương tự khác, nhưng vô ích. Tôi chắc chắn đang sử dụng kiến ​​trúc 64 bit.

Đây là đầu ra của thông tin liên quan:

$ 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

Biên tập:

Ran as b1đã kết thúc bằng: /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

Câu trả lời:


25

Xin lỗi, tập tin này là dành cho GNU / Linux

Theo fileđầu ra của bạn , chương trình này là dành cho GNU / Linux. Tôi biết điều này bởi vì:

  1. Tệp b1ELFđịnh dạng (Định dạng có thể mở rộng và có thể liên kết) , trong khi Mac OS X sử dụng Mach-Ođịnh dạng cho tệp nhị phân;
  2. filecông nhận tệp này là dành cho GNU/Linux 2.6.18, có nghĩa là nó sẽ hoạt động trên hầu hết các bản phân phối Linux hiện đại.

Để giải quyết vấn đề của bạn, bạn phải chạy vấn đề này trong bản phân phối Linux, biên dịch lại chương trình hoặc lấy phiên bản Mac OS X của chương trình này.

Vậy ... Tại sao không b1hoạt động trên hệ điều hành XYZ hoặc CPU?

Giống như mọi người nói các ngôn ngữ khác nhau, các máy tính khác nhau hiểu các hướng dẫn khác nhau. Chẳng hạn, máy Mac của bạn sử dụng bộ xử lý Intel, trong khi điện thoại Android của bạn sử dụng bộ xử lý ARM. So sánh hai bộ xử lý với tiếng Anh và tiếng Pháp. Họ có thể thuộc cùng một gia đình ngôn ngữ, tuy nhiên, bạn không thể nói cả hai cùng một lúc. Điều này dẫn đến một kết luận:

Máy tính khác nhau "nói" bằng các ngôn ngữ khác nhau.

Về lý do tại sao các hệ điều hành khác nhau (như Windows, Mac OS X và Linux) không thể sử dụng cùng một nhị phân, hãy xem xét điều này:

Điều gì làm cho phần mềm khác biệt khách quan với phần cứng? Không nhiều.

Cả hai đều cung cấp một hệ thống và một "ngôn ngữ" cho phép các thành phần phức tạp hơn của máy tính hoàn thành các tác vụ cho người dùng cuối. Cả hai đều yêu cầu một ngôn ngữ đồng ý để hoàn thành công việc. Hãy tưởng tượng nếu có 10 người trong một trận đấu la hét, mỗi người nói một ngôn ngữ khác nhau. Đây là lý do tại sao các phần mềm hệ điều hành khác nhau cần các nhị phân khác nhau, ngay cả khi cả hai hệ điều hành sử dụng cùng một bộ xử lý.


Xin chào, tôi gặp vấn đề tương tự khi cố gắng biên dịch tệp elf trong Mac OS 10.9. Bạn có thể vui lòng cho tôi biết cách chạy onmac này không
AllIsWell

Tất cả các bạn đã tìm thấy một cách cho việc này!?
Neocortex

1

Hợp ngữ? Bạn cần phải biên dịch nó, hoặc lắp ráp nó.

man as

2
Người hỏi dường như có ngôn ngữ lắp rápmã máy . Xem đầu ra của filecâu hỏi.
JdeBP
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.