繁体   English   中英

如何在 Linux 中运行二进制文件

[英]How to run binary file in Linux

我有一个名为commanKT的文件,想在 Linux 终端中运行它。 有人可以通过提供运行此文件的命令来提供帮助吗? 我试过./commonRT但我收到错误:

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

[blackberry@BuildMc MainApp]$ ls -al commonKT
-rwxrwxr-x. 1 sijith sijith 10314053 Feb 27 16:49 commonKT

要执行二进制文件,请使用: ./binary_name

如果出现错误:

bash: ./binary_name: 无法执行二进制文件

这将是因为它是使用工具链编译的,该工具链用于与您尝试运行二进制文件的目标不同的目标。

例如,如果您使用arm-none-linux-gnueabi-gcc编译 'binary_name.c' 并尝试在 x86 机器上运行生成的二进制文件,您将收到上述错误。

要从 shell 在 Linux 中执行二进制文件或 .run 文件,请使用点正斜杠友元

 ./binary_file_name

如果由于权限而失败,您可以在执行之前尝试此操作

 chmod +x binary_file_name
 # then execute it
 ./binary_file_name

希望能帮助到你

它所在的卷挂载为noexec

:-) 如果不是拼写错误,你为什么使用./commonRT而不是./commonKT ??

您可能在构建主机与执行主机上使用不兼容的架构设置编译了二进制文件。 您能否通过以下方式查看启用的目标设置

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

在您的构建主机上? 特别是, COLLECT_GCC_OPTIONS变量可能会为您提供有价值的调试信息。 然后通过以下方式查看执行主机上的 CPU 功能

cat /proc/cpuinfo | grep -m1 flags

-msse4.2 [enabled]构建主机上的不匹配,例如-msse4.2 [enabled]但 CPU 功能中缺少sse4_2标志。

如果这没有帮助,请在构建和执行主机上提供ldd commonKT的输出。

这是对@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

我要说的是:我怀疑这与您编译和链接代码的方式有关。 也许你可以解释一下你是如何做到的?

对我有用的唯一方法(从这里提取):

chmod a+x name_of_file.bin

然后通过编写运行它

./name_of_file.bin

如果您收到权限错误,您可能必须以 root 权限启动您的应用程序:

 sudo ./name_of_file.bin

或者,该文件的文件类型和/或体系结构无法与硬件一起运行和/或也没有备用 binfmt_misc 条目以其他方式处理特定格式。 使用file(1)来确定。

如果不是拼写错误,如前所述,它可能是错误的编译器选项,例如在 32 位下编译 64 位。 它不能是工具链。

您的编译选项-c使您的编译只是编译和汇编,但没有链接。

二进制文件的完整路径。 例如:/home/vitaliy2034/binary_file_name。 或者使用指令“./+binary_file_name”。 './' 在 unix 系统中它返回目录的完整路径,在其中打开终端(shell)。 我希望它有帮助。 对不起,我的英语)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM