【发布时间】:2020-06-13 02:57:03
【问题描述】:
使用 Python 3.7,我正在尝试调用 g++ 来编译和构建 C++ 文件
#!/usr/bin/env python3
import subprocess
if __name__ == '__main__':
subprocess.run(
executable="/usr/bin/g++",
args=["/some/path/source.cpp", "-std=c++17"],
shell=True
)
当我运行脚本时,可执行文件会生成。然后我chmod u+x它。但是,当我尝试执行可执行文件时,它会失败并显示:
-bash: ./a.out: cannot execute binary file: Exec format error
我已阅读有关此错误的其他一些帖子,但没有一个适用。由于某种原因,此方法失败,但是当我在终端中本地运行 g++ 时,它按预期工作。
编辑:当我调用file a.out时,输出是
a.out: ELF 32-bit LSB relocatable, ARM, EABI5 version 1 (SYSV), not stripped
感谢任何帮助,谢谢!
【问题讨论】:
-
您不需要
chmod +x a.out。它应该已经是可执行的,所以这已经很可疑了。可以查一下吗? -
请检查您在终端中运行的
g++是否与您在Python子进程中运行的相同,使用type g++ -
请在运行 Python 之前尝试删除
a.out,以确保您查看的是它生成的文件而不是其他文件。 -
最后,您的终端和 Python 子进程获取的环境变量可能存在一些差异。所以在终端中运行
env > term.txt,在子进程中运行env > subp.txt,然后diff term.txt subp.txt,看看是否存在任何可能影响编译的差异。 -
@MarkSetchell 这似乎很可能是您提出的三个问题之一,但对于最后一个问题,他可能需要在比较之前对
env输出进行排序:diff <(sort term.txt) <(sort subp.txt)。
标签: python linux bash shell raspberry-pi