Jest to odpowiedź na @craq:
I just compiled the file from C source and set it to be executable with chmod. There were no warning or error messages from gcc.
Jestem nieco zaskoczony, że trzeba było „ustawić go do wykonywania” - mój gcc
zawsze ustawia samą flagę wykonywalny. Sugeruje to, że gcc
nie spodziewał się, że będzie to końcowy plik wykonywalny, lub że nie spodziewał się, że będzie on wykonywalny w tym systemie.
Teraz starałem się po prostu utworzyć plik obiektu, tak jak poniżej:
$ gcc -c -o hello hello.c
$ chmod +x hello
(hello.c
jest typowym programem „Hello World”). Ale mój komunikat o błędzie jest nieco inny:
$ ./hello
bash: ./hello: cannot execute binary file: Exec format error`
z drugiej strony, w ten sposób, wyjście komendy file
jest identyczna jak twoja:
$ file hello
hello: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped
Podczas gdy kompiluję poprawnie, jego wydajność jest znacznie dłuższa.
$ gcc -o hello hello.c
$ file hello
hello: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=131bb123a67dd3089d23d5aaaa65a79c4c6a0ef7, not stripped
To, co mówię, to: podejrzewam, że ma to jakiś związek ze sposobem kompilacji i łączenia kodu. Może możesz rzucić trochę światła na to, jak to robisz?
jesteś pewien, że jest to plik wykonywalny? spróbuj użyć polecenia 'file' – meteorgan
Zakładając, że problem nie jest tylko mieszaniem nazw (' commonrt' kontra 'commonKT'), co mówi polecenie' plik commonKT/bin/sh'? Jeśli daje dwie różne architektury (być może jedną dla ARM i jedną dla Intela), to właśnie dlatego nie można uruchomić ARM-a na komputerze Intela. –
Oprócz użycia 'file', sugeruję również użycie' ldd'; być może dynamiczny linker lub inna podstawowa biblioteka współdzielona jest inna lub brakuje jej ... –