【问题标题】:Calling 'make' from Python inside Vagrant VM在 Vagrant VM 中从 Python 调用“make”
【发布时间】:2015-04-30 08:50:44
【问题描述】:

好的,所以这个问题是非常特定于项目的,但这对我来说仍然是个问题。

我有一个 Python/django 网站,由 Vagrant 设置的 Ubuntu VM 托管在本地主机上。我想从这个网站粘贴 C 代码并通过一系列 Python 函数对其进行编译。在其中一个函数中,我像这样调用make

arg2 = os.path.join(Default_SDK_PATH, "examples/peripheral/blinky")
arg4 = os.path.join(Default_SDK_PATH, "examples/peripheral/blinky/makefile")
args = ' '.join(['make', '-C', arg2, '-f', arg4])

p = subprocess.Popen(
    args,
    stdout=subprocess.PIPE,
    stderr=subprocess.STDOUT,
    shell=True
)
output, errors = p.communicate()
p.wait()

我指定arg2arg4 用于测试比其他任何事情都多 - 只是为了 100% 确保使用了正确的 makefile。

### ### ###

好的! 所以当子进程运行时我的问题就来了。使用make 调用makefile,但失败。当我检查构建日志时,我可以看到错误消息arm-none-eabi-gcc: error: nano.specs: No such file or directory

当我第一次调用vagrant up 时,会调用一个名为 bootstrap.sh 的文件。我已尝试向此文件添加新命令

sudo apt-get remove binutils-arm-none-eabi gcc-arm-none-eabi
sudo add-apt-repository ppa:terry.guo/gcc-arm-embedded
sudo apt-get update
sudo apt-get install gcc-arm-none-eabi=4.9.3.2015q1-0trusty13

卸载 Ubuntu 的原始 GCC 并安装最新的 GCC 工具链。那里也没有成功。我还尝试将整个文件结构返回到文件中,以检查相关文件是否存在,它们确实存在!

任何人都可以在这里指出正确的方向吗? 提前致谢。

【问题讨论】:

  • 您能否仅从终端成功执行该命令,并且在您启动脚本的同一工作目录中?
  • @skrrgwasme Vagrant VM 中使用的项目对于项目和我使用的 SDK 具有完全不同的目录。但是我的主机上有一个相同的项目副本,其中文件路径与主机设置匹配,我可以在那里调用make 没有任何问题。
  • @skrrgwasme 另外:Vagrant VM 是一个封闭的盒子,由于各种原因我无法访问。
  • 能否在引导文件中包含 make 命令?只是试图消除您的 python/c 运行的环境是否存在问题。

标签: python ubuntu gcc makefile vagrant


【解决方案1】:

哎呀,我解决了!

我不完全知道为什么,但sudo apt-get remove binutils-arm-none-eabi gcc-arm-none-eabi 似乎没有做任何事情,所以当我尝试安装新的 GCC 时,原来的 GCC 文件仍然存在。

另外,新的 GCC 安装在 /usr/bin,而旧的 GCC 有自己的指定文件夹。

所以我编辑了我的 Makefile 以从 /usr/bin 获取 arm-none-eabi-gcc-4.9.3 而不是旧的 arm-none-eabi-gccnano.specs 现已加入,生活真美好!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-13
    相关资源
    最近更新 更多