如何在ARM64架构下用shc生成兼容X86_64的可执行文件?
解决shc跨架构编译兼容问题
问题根源很明确:shc是将bash脚本转换为C代码后,调用本地编译器生成对应架构的二进制可执行文件。你在ARM64机器上编译,生成的是ARM指令集的程序,自然无法在X86_64架构的服务器上运行。下面是几个可行的解决办法:
方法1:直接在目标X86_64服务器上编译
这是最稳妥的方案,完全避免跨架构问题:
- 先把本地的
test.sh传到远程服务器:scp test.sh your_username@remote_server_ip:/path/to/target/dir - SSH登录远程服务器:
ssh your_username@remote_server_ip - 在远程服务器安装shc(Ubuntu系统):
sudo apt update && sudo apt install shc - 执行编译命令:
shc -f test.sh -o test
生成的test就是X86_64架构的可执行文件,直接就能运行。
方法2:在ARM64机器上用交叉编译工具链生成X86_64二进制
如果必须在本地编译,可以通过交叉编译工具链实现:
- 在ARM64的Ubuntu机器上安装X86_64交叉编译工具:
sudo apt install gcc-x86-64-linux-gnu - 调用shc时指定交叉编译器:
shc -f test.sh -o test -C "x86_64-linux-gnu-gcc"
这个命令会让shc使用X86_64的gcc编译生成对应架构的二进制,传到远程服务器就能正常运行。
方法3:跳过编译,直接运行原始脚本
如果不需要对脚本进行加密/编译,最简单的方式是直接传输原始test.sh到远程,然后执行:
# 传脚本到远程 scp test.sh your_username@remote_server_ip:/path/to/target/dir # 远程执行脚本 ssh your_username@remote_server_ip "bash /path/to/target/dir/test.sh"
bash脚本本身是跨架构的,只要远程服务器安装了bash环境就能运行。
内容的提问来源于stack exchange,提问作者assaabriiii
相关产品推荐
相关产品推荐

