rust - 如何使用 Raspian/Debian 在 ARMv7 上为 musl 创建静态链接的 Rust 程序?

标签 rust static-linking armv7 musl

我正在尝试通过使用 Cargo 中的 armv7-unknown-linux-musleabihf 目标在 ARMv7(Raspian/Debian)上创建 Rust 程序的静态链接版本。 使用

的依赖项 backtrace-sys v0.1.28 的构建失败
error: failed to run custom build command for `backtrace-sys v0.1.28`
process didn't exit successfully: `/home/pi/develop/balena.io/migrate/target/debug/build/backtrace-sys-7330a27c773191d1/build-script-build` (exit code: 101)
--- stdout
cargo:rustc-cfg=rbt
TARGET = Some("armv7-unknown-linux-musleabihf")
OPT_LEVEL = Some("0")
HOST = Some("armv7-unknown-linux-gnueabihf")
CC_armv7-unknown-linux-musleabihf = None
CC_armv7_unknown_linux_musleabihf = None
TARGET_CC = None
CC = None
CROSS_COMPILE = None
CFLAGS_armv7-unknown-linux-musleabihf = None
CFLAGS_armv7_unknown_linux_musleabihf = None
TARGET_CFLAGS = None
CFLAGS = None
CRATE_CC_NO_DEFAULTS = None
CARGO_CFG_TARGET_FEATURE = Some("crt-static")
running: "arm-linux-musleabihf-gcc" "-O0" "-ffunction-sections" "-fdata-sections" "-fPIC" "-static" "-march=armv7-a" "-I" "src/libbacktrace" "-I" "/home/pi/develop/balena.io/migrate/target/armv7-unknown-linux-musleabihf/debug/build/backtrace-sys-87487ee93f4ac0ac/out" "-fvisibility=hidden" "-DBACKTRACE_ELF_SIZE=32" "-DBACKTRACE_SUPPORTED=1" "-DBACKTRACE_USES_MALLOC=1" "-DBACKTRACE_SUPPORTS_THREADS=0" "-DBACKTRACE_SUPPORTS_DATA=0" "-DHAVE_DL_ITERATE_PHDR=1" "-D_GNU_SOURCE=1" "-D_LARGE_FILES=1" "-Dbacktrace_full=__rbt_backtrace_full" "-Dbacktrace_dwarf_add=__rbt_backtrace_dwarf_add" "-Dbacktrace_initialize=__rbt_backtrace_initialize" "-Dbacktrace_pcinfo=__rbt_backtrace_pcinfo" "-Dbacktrace_syminfo=__rbt_backtrace_syminfo" "-Dbacktrace_get_view=__rbt_backtrace_get_view" "-Dbacktrace_release_view=__rbt_backtrace_release_view" "-Dbacktrace_alloc=__rbt_backtrace_alloc" "-Dbacktrace_free=__rbt_backtrace_free" "-Dbacktrace_vector_finish=__rbt_backtrace_vector_finish" "-Dbacktrace_vector_grow=__rbt_backtrace_vector_grow" "-Dbacktrace_vector_release=__rbt_backtrace_vector_release" "-Dbacktrace_close=__rbt_backtrace_close" "-Dbacktrace_open=__rbt_backtrace_open" "-Dbacktrace_print=__rbt_backtrace_print" "-Dbacktrace_simple=__rbt_backtrace_simple" "-Dbacktrace_qsort=__rbt_backtrace_qsort" "-Dbacktrace_create_state=__rbt_backtrace_create_state" "-Dbacktrace_uncompress_zdebug=__rbt_backtrace_uncompress_zdebug" "-o" "/home/pi/develop/balena.io/migrate/target/armv7-unknown-linux-musleabihf/debug/build/backtrace-sys-87487ee93f4ac0ac/out/src/libbacktrace/alloc.o" "-c" "src/libbacktrace/alloc.c"

--- stderr
thread 'main' panicked at '

我尝试过从 Ubuntu Linux x86_64 进行交叉编译,但也在 Raspian 上进行本地编译,结果相同。

看起来安装程序缺少编译器,但我不知道如何安装和提供它。

最佳答案

在原生平台上,安装 musl-dev 和 musl-tools 包并调用 Cargo 如下导致构建成功:

CC=/usr/bin/musl-gcc cargo build --target=armv7-unknown-linux-musleabihf

关于rust - 如何使用 Raspian/Debian 在 ARMv7 上为 musl 创建静态链接的 Rust 程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56096112/

相关文章:

rust - 为什么 find() 和 position() 的谓词需要不同的类型?

rust - 分配数据以传递给 FFI 调用的正确方法是什么?

C++ Visual Studio : linking using pragma comment

linker - 移动到 iOS6 我收到了几乎所有外部包的链接器错误

ios - 我什么时候需要包含armv7?我也可以仅使用armv6 为iOS5 设备构建吗?

rust - 当 ref 和所有权转移都不起作用时如何返回

generics - 如何将某种通用闭包传递给函数以生成特定值

c++ - LNK2019 : unresolved external symbol -- Implicit DLL

通过将静态构建转换为特定于操作系统的二进制文件来跨操作系统构建

ios - i386/armv7 架构的 undefined symbol [cocoapods]