我正试图交叉编译一个用于第3层平台riscv64gc-unknown-linux-musl
的Rust程序,但我认为无论是链接还是正确地指导货物,都会遇到问题。
我试过跑步:
cargo +nightly build -Z build-std --target riscv64gc-unknown-linux-musl
正如这个问题的答案和这个问题的答案所指出的,会导致大量错误:
= note: /usr/bin/ld: cannot find crt1.o: No such file or directory
/usr/bin/ld: cannot find crti.o: No such file or directory
/usr/bin/ld: cannot find crtbegin.o: No such file or directory
/usr/bin/ld: /home/lindon/Projects/Rust/open_computers_lib/target/riscv64gc-unknown-linux-musl/debug/deps/open_computers_lib-0a95fe466728767f.1n96vpe9sdkbhvag.rcgu.o: Relocations in generic ELF (EM: 243)
/usr/bin/ld: /home/lindon/Projects/Rust/open_computers_lib/target/riscv64gc-unknown-linux-musl/debug/deps/open_computers_lib-0a95fe466728767f.1n96vpe9sdkbhvag.rcgu.o: Relocations in generic ELF (EM: 243)
...
(编辑用不同文件名重复的最后一行的较长列表)
我还尝试使用来自这里的预构建交叉编译工具链,以及尝试从这里构建工具链,然后使用以下脚本:
export PATH="/opt/riscv-musl/riscv64-unknown-linux-musl/bin/:$PATH"
cargo +nightly build -Z build-std --target riscv64gc-unknown-linux-musl # same as before
这给了我(对于预先构建的工具链和亲自构建的工具链的相同错误日志):
Compiling compiler_builtins v0.1.82
Compiling core v0.0.0 (/home/lindon/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core)
Compiling libc v0.2.135
Compiling cc v1.0.73
Compiling memchr v2.5.0
Compiling std v0.0.0 (/home/lindon/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std)
error: linking with `cc` failed: exit status: 1
|
/*
* 提示:该行代码过长,系统自动注释不进行高亮。一键复制会移除系统注释
* = note: "cc" "-m64" "/tmp/rustcL7qcAR/symbols.o" "/home/lindon/Projects/Rust/open_computers_lib/target/debug/build/std-c8bbb31701f1fb73/build_script_build-c8bbb31701f1fb73.build_script_build.731b8ff0-cgu.0.rcgu.o" "/home/lindon/Projects/Rust/open_computers_lib/target/debug/build/std-c8bbb31701f1fb73/build_script_build-c8bbb31701f1fb73.build_script_build.731b8ff0-cgu.1.rcgu.o" "/home/lindon/Projects/Rust/open_computers_lib/target/debug/build/std-c8bbb31701f1fb73/build_script_build-c8bbb31701f1fb73.build_script_build.731b8ff0-cgu.10.rcgu.o" "/home/lindon/Projects/Rust/open_computers_lib/target/debug/build/std-c8bbb31701f1fb73/build_script_build-c8bbb31701f1fb73.build_script_build.731b8ff0-cgu.11.rcgu.o" "/home/lindon/Projects/Rust/open_computers_lib/target/debug/build/std-c8bbb31701f1fb73/build_script_build-c8bbb31701f1fb73.build_script_build.731b8ff0-cgu.12.rcgu.o" "/home/lindon/Projects/Rust/open_computers_lib/target/debug/build/std-c8bbb31701f1fb73/build_script_build-c8bbb31701f1fb73.build_script_build.731b8ff0-cgu.13.rcgu.o" "/home/lindon/Projects/Rust/open_computers_lib/target/debug/build/std-c8bbb31701f1fb73/build_script_build-c8bbb31701f1fb73.build_script_build.731b8ff0-cgu.14.rcgu.o" "/home/lindon/Projects/Rust/open_computers_lib/target/debug/build/std-c8bbb31701f1fb73/build_script_build-c8bbb31701f1fb73.build_script_build.731b8ff0-cgu.15.rcgu.o" "/home/lindon/Projects/Rust/open_computers_lib/target/debug/build/std-c8bbb31701f1fb73/build_script_build-c8bbb31701f1fb73.build_script_build.731b8ff0-cgu.2.rcgu.o" "/home/lindon/Projects/Rust/open_computers_lib/target/debug/build/std-c8bbb31701f1fb73/build_script_build-c8bbb31701f1fb73.build_script_build.731b8ff0-cgu.3.rcgu.o" "/home/lindon/Projects/Rust/open_computers_lib/target/debug/build/std-c8bbb31701f1fb73/build_script_build-c8bbb31701f1fb73.build_script_build.731b8ff0-cgu.4.rcgu.o" "/home/lindon/Projects/Rust/open_computers_lib/target/debug/build/std-c8bbb31701f1fb73/build_script_build-c8bbb31701f1fb73.build_script_build.731b8ff0-cgu.5.rcgu.o" "/home/lindon/Projects/Rust/open_computers_lib/target/debug/build/std-c8bbb31701f1fb73/build_script_build-c8bbb31701f1fb73.build_script_build.731b8ff0-cgu.6.rcgu.o" "/home/lindon/Projects/Rust/open_computers_lib/target/debug/build/std-c8bbb31701f1fb73/build_script_build-c8bbb31701f1fb73.build_script_build.731b8ff0-cgu.7.rcgu.o" "/home/lindon/Projects/Rust/open_computers_lib/target/debug/build/std-c8bbb31701f1fb73/build_script_build-c8bbb31701f1fb73.build_script_build.731b8ff0-cgu.8.rcgu.o" "/home/lindon/Projects/Rust/open_computers_lib/target/debug/build/std-c8bbb31701f1fb73/build_script_build-c8bbb31701f1fb73.build_script_build.731b8ff0-cgu.9.rcgu.o" "/home/lindon/Projects/Rust/open_computers_lib/target/debug/build/std-c8bbb31701f1fb73/build_script_build-c8bbb31701f1fb73.1qnaa8r4se7kx3js.rcgu.o" "-Wl,--as-needed" "-L" "/home/lindon/Projects/Rust/open_computers_lib/target/debug/deps" "-L" "/home/lindon/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-Wl,-Bstatic" "/home/lindon/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd-f30f0c72643db558.rlib" "/home/lindon/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libpanic_unwind-f568c570fff954b1.rlib" "/home/lindon/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libobject-e7b70edde5e55443.rlib" "/home/lindon/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libmemchr-e89379089032cd0e.rlib" "/home/lindon/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libaddr2line-e7d90005a619f6ea.rlib" "/home/lindon/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libgimli-e8fa7b53a3149a70.rlib" "/home/lindon/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_demangle-db4d651637ed1365.rlib" "/home/lindon/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd_detect-255c18ca7ff0a7c6.rlib" "/home/lindon/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libhashbrown-1791beb5b36e409b.rlib" "/home/lindon/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libminiz_oxide-ab2b83cf39766489.rlib" "/home/lindon/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libadler-21993ed5a33c1bb3.rlib" "/home/lindon/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_alloc-b113a1d1429de7b6.rlib" "/home/lindon/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libunwind-0aacf29316aaa95c.rlib" "/home/lindon/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcfg_if-fcf994c37af81dc5.rlib" "/home/lindon/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liblibc-a5319eed00c3264d.rlib" "/home/lindon/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liballoc-c6c03e024a2f1e46.rlib" "/home/lindon/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_core-522518611024dce5.rlib" "/home/lindon/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcore-05898138a596088a.rlib" "/home/lindon/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcompiler_builtins-b7c79d85cf21a511.rlib" "-Wl,-Bdynamic" "-lgcc_s" "-lutil" "-lrt" "-lpthread" "-lm" "-ldl" "-lc" "-Wl,--eh-frame-hdr" "-Wl,-znoexecstack" "-L" "/home/lindon/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-o" "/home/lindon/Projects/Rust/open_computers_lib/target/debug/build/std-c8bbb31701f1fb73/build_script_build-c8bbb31701f1fb73" "-Wl,--gc-sections" "-pie" "-Wl,-zrelro,-znow" "-nodefaultlibs"
*/
= note: /opt/riscv-musl/riscv64-unknown-linux-musl/bin/ld: unrecognised emulation mode: elf_x86_64
Supported emulations: elf64lriscv elf64lriscv_lp64f elf64lriscv_lp64 elf32lriscv elf32lriscv_ilp32f elf32lriscv_ilp32 elf64briscv elf64briscv_lp64f elf64briscv_lp64 elf32briscv elf32briscv_ilp32f elf32briscv_ilp32
collect2: error: ld returned 1 exit status
error: could not compile `std` due to previous error
warning: build failed, waiting for other jobs to finish...
...
nightly-x86_64-unknown-linux-gnu
在std
路径中的存在使我相信我可能是在错误地指示货物,或者仅仅是因为我的主机系统是x86_64-unknown-linux-gnu
。
可能具有重要意义的补充资料:
main
函数。rustup update
之后完成的,我在项目中使用了2021年版的Rust。发布于 2022-11-15 18:18:03
先决条件/假设
这个答案假设如下:
riscv linux musl
C交叉工具链安装在/opt/riscv-musl/
上。rustup toolchain install nightly
使用说明
具有如下所示的Rust项目文件夹结构:
├── src/
├── .cargo/
│ └── config.toml
└── compile.sh
内部config.toml
[target.riscv64gc-unknown-linux-musl]
rustflags = [
"-C", "target-feature=-crt-static"
]
linker = "riscv64-unknown-linux-musl-gcc"
ar = "riscv64-unknown-linux-musl-ar"
内部compile.sh
export PATH="/opt/riscv-musl/bin/:$PATH"
cargo +nightly build -Z build-std --target riscv64gc-unknown-linux-musl
如果riscv64-unknown-linux-musl-gcc
和riscv64-unknown-linux-musl-ar
已经在$PATH
上了,那么compile.sh
中的export
语句就没有必要了。
现在,如果您想编译到riscv64gc-unknown-linux-musl
目标,只需运行compile.sh
。
更多信息
为了获得我最终获得的Functionalconfig.toml
,我采取了以下步骤:
[target.riscv64gc-unknown-linux-musl]
rustflags = [
"-L/home/blackdragon2447/x-tools/riscv64-unknown-linux-musl/riscv64-unknown-linux-musl/sysroot/lib",
"-L/home/blackdragon2447/x-tools/riscv64-unknown-linux-musl/lib/gcc/riscv64-unknown-linux-musl/11.2.0/",
"-L/home/blackdragon2447/x-tools/riscv64-unknown-linux-musl/riscv64-unknown-linux-musl/sysroot/usr/lib",
"-C", "link-args=-lc",
"-C", "prefer-dynamic",
"-C", "target-feature=-crt-static"
]
ar = "riscv64-unknown-linux-musl-ar"
linker = "riscv64-unknown-linux-musl-gcc"
如果这个答案中的那个由于某种原因不能工作,那么就试着使用它(不要忘记改变其中的路径)。
https://stackoverflow.com/questions/74424444
复制相似问题