通过 rust 运行 ld 命令仅在 50% 的情况下有效

问题描述 投票:0回答:1

我正在尝试用 Rust 创建一个编译器。我现在想使用此命令将输出的目标文件链接到可执行文件

ld test.o -o test
。当我在 shell 中手动运行此命令时,它总是有效。不过,当我让 rust 这样做时,它有时会起作用,有时会出现此错误:
ld: warning: cannot find entry symbol _start; not setting start address

这确实是 50/50,我不知道是什么原因造成的。

这就是我运行命令的方式:

process::Command::new("ld")
    .arg(format!("{}.o", outputfile))
    .arg("-o")
    .arg(&outputfile)
    .spawn()
    .expect("Failed to link");

我尝试通过打印如下命令来检查 rust 实际运行的内容来调试此问题:

println!(
    "{:?}",
    process::Command::new("ld")
        .arg(format!("{}.o", outputfile))
        .arg("-o")
        .arg(&outputfile)
);

这将打印出:

"ld" "test.o" "-o" "test"
,我直接将其复制到我的外壳中,没有任何问题。

这很奇怪,我已经尝试解决这个问题太久了。如果您知道可能导致此问题的原因,请帮忙。

编辑: 如果您需要任何额外信息来提供帮助,您可以在我的 GitHub 上找到所有代码:https://github.com/sten-code/rlangc 问题出在构建函数内部

main.rs
底部的代码上。 请注意,我昨天开始学习 Rust,所以代码可能很糟糕。

rust process linker command
1个回答
0
投票

已解决问题

问题是我在链接器命令之前运行了 nasm 命令。链接器依赖于 nasm 命令的输出。 Rust 中的

Command::spawn
异步运行命令,因此当我运行链接器命令时,有 50% 的机会 nasm 命令未完成创建目标文件,从而导致崩溃。感谢@cafce25向我指出了这一点。

© www.soinside.com 2019 - 2024. All rights reserved.