Как запустить двоичный файл в Linux

У меня есть файл под названием commanKT и хочу запустить его в терминале Linux. Может ли кто-нибудь помочь, предоставив команду запустить этот файл? Я попробовал ./commonRT, но я получаю сообщение об ошибке:

"bash: ./commonrt: cannot execute binary file"

[[email protected] MainApp]$ ls -al commonKT
-rwxrwxr-x. 1 sijith sijith 10314053 Feb 27 16:49 commonKT

Ответ 1

Чтобы выполнить двоичный код, используйте: ./binary_name.

Если вы получите сообщение об ошибке:

bash:./binary_name: невозможно выполнить двоичный файл

это произойдет потому, что он был скомпилирован с помощью цепочки инструментов, которая была для другой цели, к которой вы пытаетесь запустить двоичный файл.

Например, если вы скомпилируете 'binary_name.c' с помощью arm-none-linux-gnueabi-gcc и попробуйте запустить сгенерированный двоичный файл на машине x86, вы получите вышеупомянутую ошибку.

Ответ 2

Чтобы выполнить бинарный или .run файл в Linux из оболочки, используйте друга с косой чертой

 ./binary_file_name

и если он не отвечает из-за разрешений, вы можете попробовать это, прежде чем выполнять его

 chmod +x binary_file_name
 # then execute it
 ./binary_file_name

Надеюсь, что это поможет

Ответ 3

Установлен уровень громкости noexec.

Ответ 4

:-) Если не опечатать, почему вы используете ./commonRT вместо ./commonKT??

Ответ 5

Возможно, вы скомпилировали свой двоичный файл с несовместимыми настройками архитектуры на хосте сборки и хосте выполнения. Можете ли вы просмотреть настройки целевых параметров с помощью

g++ {all-your-build-flags-here} -Q -v --help=target

на хосте сборки? В частности, переменная COLLECT_GCC_OPTIONS может дать вам важную информацию об отладке. Затем просмотрите возможности ЦП на хосте выполнения с помощью

cat /proc/cpuinfo | grep -m1 flags

Обратите внимание на несоответствия, такие как -msse4.2 [enabled] на хосте сборки, но отсутствующий флаг sse4_2 в возможностях ЦП.

Если это не помогает, укажите вывод ldd commonKT на хосте сборки и выполнения.

Ответ 6

Это ответ на @craq:

Я только что скомпилировал файл из источника C и установил его для выполнения с помощью chmod. Не было сообщений об ошибках или ошибках от gcc.

Я немного удивлен, что вам нужно "установить его в исполняемый файл" - мой gcc всегда устанавливает сам исполняемый флаг. Это говорит мне о том, что gcc не ожидал, что это будет окончательный исполняемый файл, или что он не ожидает его выполнения в этой системе.

Теперь я попытался просто создать объектный файл, например:

$ gcc -c -o hello hello.c
$ chmod +x hello

(hello.c - типичная программа Hello World). Но мое сообщение об ошибке несколько отличается:

$ ./hello
bash: ./hello: cannot execute binary file: Exec format error`

С другой стороны, таким образом, вывод команды file идентичен вашей:

$ file hello
hello: ELF 64-bit LSB  relocatable, x86-64, version 1 (SYSV), not stripped

Если я правильно компилирую, его вывод намного длиннее.

$ 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

Я говорю: я подозреваю, что это имеет какое-то отношение к тому, как вы компилируете и связываете свой код. Может быть, вы можете пролить свет на то, как вы это делаете?

Ответ 7

Или файл имеет тип файла и/или архитектуру, которые вы просто не можете запускать с вашим оборудованием, и/или нет другой записи binfmt_misc для обработки определенного формата каким-либо другим способом. Используйте file(1) для определения.

Ответ 8

Единственный способ, который работает для меня (извлечен из здесь):

chmod a+x name_of_file.bin

Затем запустите его, написав

./name_of_file.bin

Если вы получаете ошибку разрешения, возможно, вам придется запустить приложение с правами root:

 sudo ./name_of_file.bin

Ответ 9

Если это не опечатка, как указывалось ранее, это могут быть неправильные параметры компилятора, такие как компиляция 64-битного кода до 32 бит. Это не должна быть инструментальная цепочка.

Ответ 10

ваш вариант компиляции -c делает компиляцию только компиляции и сборки, но не ссылки.

Ответ 11

полный путь для двоичного файла. Например:/home/vitaliy2034/binary_file_name. Или используйте директиву "./+binary_file_name". './' в системе unix возвращает полный путь к каталогу, в котором вы открываете терминал (shell). Я надеюсь, что это помогает. Извините, за мой английский язык)