Как запустить двоичный файл в 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).
Я надеюсь, что это помогает.
Извините, за мой английский язык)