linux - 编译 aarch64 二进制 bash 脚本

标签 linux bash compilation binary executable

我在 x86-64 机器上使用 shc 将 bash 脚本转换为可执行二进制文件。这在我的机器上运行良好,但我这样做是为了将它推送到 aarch64 机器上。将二进制文件复制到 aarch64 机器后,出现此错误:

无法执行二进制文件:执行格式错误

这似乎是由于二进制文件未被格式化以在该操作系统上运行所致。有谁知道一个工具可以给我一个可以在 aarch64 上执行的二进制文件(似乎 shc 不能这样做)。

编辑:文件命令打印出来(在 aarch 机器上):

ELF 64 位 LSB 可执行文件,x86-64,版本 1 (SYSV),动态链接,解释器/lib64/ld-linux-x86-64.so.2,适用于 GNU/Linux 2.6.32,BuildID[sha1 ]=f6f72e60c9ae8c2fd3abe5aa47f9ba6be7000be6, 剥离

只需确认该文件适用于 x86-46

最佳答案

简短的回答是在目标操作系统上编译二进制文件。从 man 页面:

shc itself is not a compiler such as cc, it rather encodes and encrypts a shell script and generates C source code with the added expiration capability. It then uses the system compiler to compile a stripped binary which behaves exactly like the original script.

编译产生一个包含机器代码的目标文件。机器代码“可以被视为已编译或汇编的计算机程序的最低级别表示,或者被视为原始的和硬件相关的编程语言”(引用 https://en.wikipedia.org/wiki/Machine_code)。在 SunOS 11.3 SPARCv4 上编译源代码生成的机器代码将不包含与在 AIX PowerPC8 上编译相同源代码生成的机器代码相同的指令。

关于linux - 编译 aarch64 二进制 bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53175168/

相关文章:

bash - 需要密码时检查SSH连接是否可行

linux - 脚本中的 ejabberdctl 命令给出错误 "Connection attempt from disallowed node"

linux - 需要在 bash 中的两个给定时间之间生成时间值

xamarin - 编译Xamarin Forms新项目时出错

c++ - 使用未分配的内存没有错误?

linux - Linux环境下ASP.NET Core网站文件放在哪里

c++ - 控制外部库的输出

compilation - 错误 127 编译 'Makefile'

objective-c - "Expected a type"错误指向方法的返回类型

c - 如何在循环中设置信号检查?