rust - Rust 无法构建 64 位 RISC-V 二进制文件
问题描述
我正在尝试在我的台式计算机上构建一个 riscv64gc 二进制文件。我使用 rustup 添加了工具链,它似乎正在编译但没有链接。我没有看到目标三重通过,也没有使用 llvm 链接器?这是怎么回事?
$ cargo build
Compiling rusty v0.1.0 (/home/gonzo/github/vmscript/programs/rusty)
error: linking with `cc` failed: exit code: 1
|
= note: "cc" "-Wl,--as-needed" "-Wl,-z,noexecstack" "-Wl,--eh-frame-hdr" "-L" "/home/gonzo/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/riscv64gc-unknown-linux-gnu/lib" "/home/gonzo/github/vmscript/programs/rusty/target/riscv64gc-unknown-linux-gnu/debug/deps/rusty-91e5c79e8b10a398.1icj07kgp6riy6ou.rcgu.o" "/home/gonzo/github/vmscript/programs/rusty/target/riscv64gc-unknown-linux-gnu/debug/deps/rusty-91e5c79e8b10a398.2nds3en7x7harbuk.rcgu.o" "/home/gonzo/github/vmscript/programs/rusty/target/riscv64gc-unknown-linux-gnu/debug/deps/rusty-91e5c79e8b10a398.2v63m1b4etm8s6nh.rcgu.o" "/home/gonzo/github/vmscript/programs/rusty/target/riscv64gc-unknown-linux-gnu/debug/deps/rusty-91e5c79e8b10a398.303kqsurg5oh0riy.rcgu.o" "/home/gonzo/github/vmscript/programs/rusty/target/riscv64gc-unknown-linux-gnu/debug/deps/rusty-91e5c79e8b10a398.3elkuabnsvy95hq7.rcgu.o" "/home/gonzo/github/vmscript/programs/rusty/target/riscv64gc-unknown-linux-gnu/debug/deps/rusty-91e5c79e8b10a398.3r64kd80pqjv10ju.rcgu.o" "/home/gonzo/github/vmscript/programs/rusty/target/riscv64gc-unknown-linux-gnu/debug/deps/rusty-91e5c79e8b10a398.3wgrjsqhbin1mctj.rcgu.o" "/home/gonzo/github/vmscript/programs/rusty/target/riscv64gc-unknown-linux-gnu/debug/deps/rusty-91e5c79e8b10a398.48r3jc0pf6ft3du4.rcgu.o" "-o" "/home/gonzo/github/vmscript/programs/rusty/target/riscv64gc-unknown-linux-gnu/debug/deps/rusty-91e5c79e8b10a398" "/home/gonzo/github/vmscript/programs/rusty/target/riscv64gc-unknown-linux-gnu/debug/deps/rusty-91e5c79e8b10a398.2t6innn061qnfecr.rcgu.o" "-Wl,--gc-sections" "-pie" "-Wl,-zrelro" "-Wl,-znow" "-nodefaultlibs" "-L" "/home/gonzo/github/vmscript/programs/rusty/target/riscv64gc-unknown-linux-gnu/debug/deps" "-L" "/home/gonzo/github/vmscript/programs/rusty/target/debug/deps" "-L" "/home/gonzo/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/riscv64gc-unknown-linux-gnu/lib" "-Wl,--start-group" "-Wl,-Bstatic" "/home/gonzo/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/riscv64gc-unknown-linux-gnu/lib/libstd-4d23caece3cfb404.rlib" "/home/gonzo/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/riscv64gc-unknown-linux-gnu/lib/libpanic_unwind-bd0597832b931a8d.rlib" "/home/gonzo/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/riscv64gc-unknown-linux-gnu/lib/libminiz_oxide-c69f5df8e3069335.rlib" "/home/gonzo/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/riscv64gc-unknown-linux-gnu/lib/libadler-d00e403322625f86.rlib" "/home/gonzo/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/riscv64gc-unknown-linux-gnu/lib/libobject-894038d69e57102f.rlib" "/home/gonzo/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/riscv64gc-unknown-linux-gnu/lib/libaddr2line-75fbaf228f48ce8f.rlib" "/home/gonzo/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/riscv64gc-unknown-linux-gnu/lib/libgimli-bff05ee40dca0583.rlib" "/home/gonzo/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/riscv64gc-unknown-linux-gnu/lib/librustc_demangle-409277b88ad09194.rlib" "/home/gonzo/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/riscv64gc-unknown-linux-gnu/lib/libhashbrown-b2b20bb543a774ac.rlib" "/home/gonzo/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/riscv64gc-unknown-linux-gnu/lib/librustc_std_workspace_alloc-1487b67180a724ba.rlib" "/home/gonzo/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/riscv64gc-unknown-linux-gnu/lib/libunwind-44237576dfb581e1.rlib" "/home/gonzo/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/riscv64gc-unknown-linux-gnu/lib/libcfg_if-e990ad0df181d5f9.rlib" "/home/gonzo/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/riscv64gc-unknown-linux-gnu/lib/liblibc-9ba7c5b4ecd18d15.rlib" "/home/gonzo/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/riscv64gc-unknown-linux-gnu/lib/liballoc-b00339818adfcc5f.rlib" "/home/gonzo/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/riscv64gc-unknown-linux-gnu/lib/librustc_std_workspace_core-033865d9c78f3d80.rlib" "/home/gonzo/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/riscv64gc-unknown-linux-gnu/lib/libcore-6c4981fd8fe7c5df.rlib" "-Wl,--end-group" "/home/gonzo/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/riscv64gc-unknown-linux-gnu/lib/libcompiler_builtins-55f6cd5bd09b4c18.rlib" "-Wl,-Bdynamic" "-ldl" "-lrt" "-lpthread" "-lgcc_s" "-lc" "-lm" "-lrt" "-lpthread" "-lutil" "-ldl"
= note: /usr/bin/ld: /home/gonzo/github/vmscript/programs/rusty/target/riscv64gc-unknown-linux-gnu/debug/deps/rusty-91e5c79e8b10a398.1icj07kgp6riy6ou.rcgu.o: Relocations in generic ELF (EM: 243)
/usr/bin/ld: /home/gonzo/github/vmscript/programs/rusty/target/riscv64gc-unknown-linux-gnu/debug/deps/rusty-91e5c79e8b10a398.1icj07kgp6riy6ou.rcgu.o: Relocations in generic ELF (EM: 243)
/usr/bin/ld: /home/gonzo/github/vmscript/programs/rusty/target/riscv64gc-unknown-linux-gnu/debug/deps/rusty-91e5c79e8b10a398.1icj07kgp6riy6ou.rcgu.o: Relocations in generic ELF (EM: 243)
/usr/bin/ld: /home/gonzo/github/vmscript/programs/rusty/target/riscv64gc-unknown-linux-gnu/debug/deps/rusty-91e5c79e8b10a398.1icj07kgp6riy6ou.rcgu.o: Relocations in generic ELF (EM: 243)
/usr/bin/ld: /home/gonzo/github/vmscript/programs/rusty/target/riscv64gc-unknown-linux-gnu/debug/deps/rusty-91e5c79e8b10a398.1icj07kgp6riy6ou.rcgu.o: Relocations in generic ELF (EM: 243)
/usr/bin/ld: /home/gonzo/github/vmscript/programs/rusty/target/riscv64gc-unknown-linux-gnu/debug/deps/rusty-91e5c79e8b10a398.1icj07kgp6riy6ou.rcgu.o: Relocations in generic ELF (EM: 243)
/usr/bin/ld: /home/gonzo/github/vmscript/programs/rusty/target/riscv64gc-unknown-linux-gnu/debug/deps/rusty-91e5c79e8b10a398.1icj07kgp6riy6ou.rcgu.o: Relocations in generic ELF (EM: 243)
/usr/bin/ld: /home/gonzo/github/vmscript/programs/rusty/target/riscv64gc-unknown-linux-gnu/debug/deps/rusty-91e5c79e8b10a398.1icj07kgp6riy6ou.rcgu.o: Relocations in generic ELF (EM: 243)
/usr/bin/ld: /home/gonzo/github/vmscript/programs/rusty/target/riscv64gc-unknown-linux-gnu/debug/deps/rusty-91e5c79e8b10a398.1icj07kgp6riy6ou.rcgu.o: Relocations in generic ELF (EM: 243)
/usr/bin/ld: /home/gonzo/github/vmscript/programs/rusty/target/riscv64gc-unknown-linux-gnu/debug/deps/rusty-91e5c79e8b10a398.1icj07kgp6riy6ou.rcgu.o: error adding symbols: file in wrong format
collect2: error: ld returned 1 exit status
error: aborting due to previous error
error: could not compile `rusty`.
To learn more, run the command again with --verbose.
我假设应该使用 lld 。这是我的货物配置:
[build]
target = "riscv64gc-unknown-linux-gnu"
更新:我现在有一个自定义链接器脚本,这使得 ld 停止抱怨,除了它不能构建 riscv64 二进制文件,因为它是系统链接器。只是我还是 riscv64-unknown-linux-gnu 工具链完全坏了?我对 Rust 中的其他 riscv 工具链没有任何此类问题。
它只是实际支持 std 的单个工具链,它几乎感染了 Rust 中的每个包,使得它不可能走 no_std 路线,所以我们来了。
解决方案
定制了哪个链接器?我认为我们有一些问题。实际上,也许使用 update-to-date risc-v-toolchain。
[build]
target = "riscv64gc-unknown-linux-gnu"
rustflags = ["-C", "target-feature=+crt-static"]
[test]
target = "riscv64gc-unknown-linux-gnu"
rustflags = ["-C", "target-feature=+crt-static"]
[target.riscv64gc-unknown-linux-gnu]
runner = "qemu-riscv64"
linker = "riscv64-unknown-linux-gnu-gcc"
ar = "riscv64-unknown-linux-ar"
它运作良好。静态功能适用于在qemu
.
推荐阅读
- metasploit - Metasploit Framework .go 模块无法加载
- django - Djanjo 唯一约束 - 上传但跳过重复项
- java - Java 如何返回一个布尔数组而不得到像 [Z@4517d9a3?
- python - 为什么在 Python 中运行查询比在 Oracle SQL Developer 中运行查询需要更长的时间?
- c++ - C ++:是否定义了具有相同名称的typedef嵌套类型的行为?
- android - 在 Mac OS 上反应原生 Android
- r - 与向量不一致的最小值的函数不起作用
- python - 为什么我们不能从类的内部类访问外部范围变量?
- python - 如何在pyspark中设置计数id的日期间隔?
- javascript - 过滤后返回整个对象,而不仅仅是匹配的值