Jak rozwiązać: -bash:: nie można wykonać pliku binarnego

18

Mam plik o nazwie b1, który zawiera język asemblera. Próbuję wykonać plik w systemie OSX przy użyciu

$ ./b1

Otrzymuję następujący błąd:

-bash: ./b1: cannot execute binary file

Patrzyłem na inne podobne pytania, ale bezskutecznie. Zdecydowanie używam architektury 64-bitowej.

Oto wyniki odpowiednich informacji:

$ 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

Edytować:

Ran, as b1który zakończył się z: /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

użytkownik304868
źródło

Odpowiedzi:

25

Przepraszamy, ten plik dotyczy systemu GNU / Linux

Zgodnie z twoimi danymi filewyjściowymi, ten program jest przeznaczony dla GNU / Linux. Wiem to, ponieważ:

  1. Plik b1ma ELFformat (Extensible and Linkable Format) , podczas gdy Mac OS X używa tego Mach-Oformatu dla plików binarnych;
  2. filerozpoznaje ten plik GNU/Linux 2.6.18, co oznacza, że ​​będzie działał w większości współczesnych dystrybucji Linuksa.

Aby rozwiązać problem, musisz uruchomić ten problem w dystrybucji Linuksa, ponownie skompilować program lub pobrać wersję tego programu dla systemu Mac OS X.

Więc ... Dlaczego nie b1działa na XYZ OS lub CPU?

Tak jak ludzie mówią różnymi językami, tak różne komputery rozumieją różne instrukcje. Na przykład komputer Mac korzysta z procesora Intel, a telefon z Androidem korzysta z procesora ARM. Porównaj te dwa procesory z angielskim i francuskim. Mogą należeć do tej samej rodziny językowej, ale nie można mówić jednocześnie w obu językach. To prowadzi do wniosku:

Różne komputery „rozmawiają” różnymi językami.

Jeśli chodzi o to, dlaczego różne systemy operacyjne (takie jak Windows, Mac OS X i Linux) nie mogą używać tych samych plików binarnych, rozważ to:

Co obiektywnie odróżnia oprogramowanie od sprzętu? Niewiele.

Oba zapewniają system i „język”, który pozwala bardziej złożonym komponentom komputera na wykonywanie zadań dla użytkownika końcowego. Oba wymagają uzgodnionego języka do wykonania pracy. Wyobraź sobie, że w meczu krzyczało 10 osób, każda mówi innym językiem. Dlatego różne oprogramowanie systemu operacyjnego potrzebuje różnych plików binarnych, nawet jeśli oba systemy operacyjne korzystają z tego samego procesora.

Winny
źródło
Cześć, mam podobny problem z kompilacją pliku elfa w Mac OS 10.9. Czy możesz mi powiedzieć, jak uruchomić ten onmac
AllIsWell,
Alls Cóż, znalazłeś sposób na to !?
Neocortex
1

język programowania? Musisz go skompilować lub raczej złożyć.

man as
Emery Łapiński
źródło
2
Pytający wydaje się mieć skonfliktowany język asemblera i kod maszynowy . Zobacz wynik filew pytaniu.
JdeBP