【问题标题】:Trouble compiling rust crates that include C libraries for aarch64编译包含 aarch64 的 C 库的 rust crate 时遇到问题
【发布时间】:2021-01-24 18:10:32
【问题描述】:

我正在尝试在 aarch64 linux docker 容器中编译一个 rust 应用程序以在 raspberry pi 4 上运行。除了包不是纯 rust 并使用 c 库时,我的工作正常。 ring crate 就是一个例子,当我尝试在不设置 ENV TARGET_CC=something 的情况下构建环库时,它会失败并出现以下错误:

#18 32.35    Compiling ring v0.16.19
#18 38.13 error: failed to run custom build command for `ring v0.16.19`
#18 38.13 
#18 38.13 Caused by:
#18 38.13   process didn't exit successfully: `/usr/src/content-manager/target/release/build/ring-902dd3bf18c6ec17/build-script-build` (exit code: 101)
#18 38.13   --- stdout
#18 38.13   OPT_LEVEL = Some("3")
#18 38.13   TARGET = Some("aarch64-unknown-linux-musl")
#18 38.13   HOST = Some("aarch64-unknown-linux-gnu")
#18 38.13   CC_aarch64-unknown-linux-musl = None
#18 38.13   CC_aarch64_unknown_linux_musl = None
#18 38.13   TARGET_CC = Some("aarch64-linux-musl-gcc")
#18 38.13   CFLAGS_aarch64-unknown-linux-musl = None
#18 38.13   CFLAGS_aarch64_unknown_linux_musl = None
#18 38.13   TARGET_CFLAGS = None
#18 38.13   CFLAGS = None
#18 38.13   CRATE_CC_NO_DEFAULTS = None
#18 38.13   DEBUG = Some("false")
#18 38.13   CARGO_CFG_TARGET_FEATURE = None
#18 38.13 
#18 38.13   --- stderr
#18 38.13   running "aarch64-linux-musl-gcc" "-O3" "-ffunction-sections" "-fdata-sections" "-fPIC" "-I" "include" "-Wall" "-Wextra" "-pedantic" "-pedantic-errors" "-Wall" "-Wextra" "-Wcast-align" "-Wcast-qual" "-Wconversion" "-Wenum-compare" "-Wfloat-equal" "-Wformat=2" "-Winline" "-Winvalid-pch" "-Wmissing-field-initializers" "-Wmissing-include-dirs" "-Wredundant-decls" "-Wshadow" "-Wsign-compare" "-Wsign-conversion" "-Wundef" "-Wuninitialized" "-Wwrite-strings" "-fno-strict-aliasing" "-fvisibility=hidden" "-fstack-protector" "-g3" "-U_FORTIFY_SOURCE" "-DNDEBUG" "-c" "-o/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/aesv8-armx-linux64.o" "/usr/local/cargo/registry/src/github.com-1ecc6299db9ec823/ring-0.16.19/pregenerated/aesv8-armx-linux64.S"
#18 38.13   thread 'main' panicked at 'execution failed', /usr/local/cargo/registry/src/github.com-1ecc6299db9ec823/ring-0.16.19/build.rs:673:9
#18 38.13   note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

在环 build docs 中提到需要设置 TARGET_CC 和 TARGET_AR,当我将 TARGET_CC 设置为 aarch64-Linux-gnu-gcc 时出现以下错误

#18 62.62   process didn't exit successfully: `/usr/src/content-manager/target/release/build/ring-902dd3bf18c6ec17/build-script-build` (exit code: 1)
#18 62.62   --- stdout
#18 62.62   OPT_LEVEL = Some("3")
#18 62.62   TARGET = Some("aarch64-unknown-linux-musl")
#18 62.62   HOST = Some("aarch64-unknown-linux-gnu")
#18 62.62   CC_aarch64-unknown-linux-musl = None
#18 62.62   CC_aarch64_unknown_linux_musl = None
...
#18 62.62   CRATE_CC_NO_DEFAULTS = None
#18 62.62   DEBUG = Some("false")
#18 62.62   CARGO_CFG_TARGET_FEATURE = None
#18 62.62   running: "aarch64-linux-musl-ar" "cq" "/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/libring-core.a" "/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/aesv8-armx-linux64.o" "/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/ghashv8-armx-linux64.o" "/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/vpaes-armv8-linux64.o" "/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/armv8-mont-linux64.o" "/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/chacha-armv8-linux64.o" "/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/ecp_nistz256-armv8-linux64.o" "/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/ghash-neon-armv8-linux64.o" "/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/sha512-armv8-linux64.o" "/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/sha256-armv8-linux64.o" "/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/aes_nohw.o" "/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/montgomery.o" "/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/montgomery_inv.o" "/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/limbs.o" "/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/mem.o" "/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/poly1305.o" "/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/crypto.o" "/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/curve25519.o" "/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/ecp_nistz.o" "/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/ecp_nistz256.o" "/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/gfp_p256.o" "/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/gfp_p384.o"
#18 62.62   exit code: 127
#18 62.62 
#18 62.62   --- stderr
#18 62.62   running "aarch64-linux-gnu-gcc" "-O3" "-ffunction-sections" "-fdata-sections" "-fPIC" "-I" "include" "-Wall" "-Wextra" "-pedantic" "-pedantic-errors" "-Wall" "-Wextra" "-Wcast-align" "-Wcast-qual" "-Wconversion" "-Wenum-compare" "-Wfloat-equal" "-Wformat=2" "-Winline" "-Winvalid-pch" "-Wmissing-field-initializers" "-Wmissing-include-dirs" "-Wredundant-decls" "-Wshadow" "-Wsign-compare" "-Wsign-conversion" "-Wundef" "-Wuninitialized" "-Wwrite-strings" "-fno-strict-aliasing" "-fvisibility=hidden" "-fstack-protector" "-g3" "-U_FORTIFY_SOURCE" "-DNDEBUG" "-c" "-o/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/aesv8-armx-linux64.o" "/usr/local/cargo/registry/src/github.com-1ecc6299db9ec823/ring-0.16.19/pregenerated/aesv8-armx-linux64.S"
#18 62.62   running "aarch64-linux-gnu-gcc" "-O3" "-ffunction-sections" "-fdata-sections" "-fPIC" "-I" "include" "-Wall" "-Wextra" "-pedantic" "-pedantic-errors" "-Wall" "-Wextra" "-Wcast-align" "-Wcast-qual" "-Wconversion" "-Wenum-compare" "-Wfloat-equal" "-Wformat=2" "-Winline" "-Winvalid-pch" "-Wmissing-field-initializers" "-Wmissing-include-dirs" "-Wredundant-decls" "-Wshadow" "-Wsign-compare" "-Wsign-conversion" "-Wundef" "-Wuninitialized" "-Wwrite-strings" "-fno-strict-aliasing" "-fvisibility=hidden" "-fstack-protector" "-g3" "-U_FORTIFY_SOURCE" "-DNDEBUG" "-c" "-o/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/ghashv8-armx-linux64.o" "/usr/local/cargo/registry/src/github.com-1ecc6299db9ec823/ring-0.16.19/pregenerated/ghashv8-armx-linux64.S"
#18 62.62   running "aarch64-linux-gnu-gcc" "-O3" "-ffunction-sections" "-fdata-sections" "-fPIC" "-I" "include" "-Wall" "-Wextra" "-pedantic" "-pedantic-errors" "-Wall" "-Wextra" "-Wcast-align" "-Wcast-qual" "-Wconversion" "-Wenum-compare" "-Wfloat-equal" "-Wformat=2" "-Winline" "-Winvalid-pch" "-Wmissing-field-initializers" "-Wmissing-include-dirs" "-Wredundant-decls" "-Wshadow" "-Wsign-compare" "-Wsign-conversion" "-Wundef" "-Wuninitialized" "-Wwrite-strings" "-fno-strict-aliasing" "-fvisibility=hidden" "-fstack-protector" "-g3" "-U_FORTIFY_SOURCE" "-DNDEBUG" "-c" "-o/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/vpaes-armv8-linux64.o" "/usr/local/cargo/registry/src/github.com-1ecc6299db9ec823/ring-0.16.19/pregenerated/vpaes-armv8-linux64.S"
#18 62.62   running "aarch64-linux-gnu-gcc" "-O3" "-ffunction-sections" "-fdata-sections" "-fPIC" "-I" "include" "-Wall" "-Wextra" "-pedantic" "-pedantic-errors" "-Wall" "-Wextra" "-Wcast-align" "-Wcast-qual" "-Wconversion" "-Wenum-compare" "-Wfloat-equal" "-Wformat=2" "-Winline" "-Winvalid-pch" "-Wmissing-field-initializers" "-Wmissing-include-dirs" "-Wredundant-decls" "-Wshadow" "-Wsign-compare" "-Wsign-conversion" "-Wundef" "-Wuninitialized" "-Wwrite-strings" "-fno-strict-aliasing" "-fvisibility=hidden" "-fstack-protector" "-g3" "-U_FORTIFY_SOURCE" "-DNDEBUG" "-c" "-o/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/armv8-mont-linux64.o" "/usr/local/cargo/registry/src/github.com-1ecc6299db9ec823/ring-0.16.19/pregenerated/armv8-mont-linux64.S"
#18 62.62   running "aarch64-linux-gnu-gcc" "-O3" "-ffunction-sections" "-fdata-sections" "-fPIC" "-I" "include" "-Wall" "-Wextra" "-pedantic" "-pedantic-errors" "-Wall" "-Wextra" "-Wcast-align" "-Wcast-qual" "-Wconversion" "-Wenum-compare" "-Wfloat-equal" "-Wformat=2" "-Winline" "-Winvalid-pch" "-Wmissing-field-initializers" "-Wmissing-include-dirs" "-Wredundant-decls" "-Wshadow" "-Wsign-compare" "-Wsign-conversion" "-Wundef" "-Wuninitialized" "-Wwrite-strings" "-fno-strict-aliasing" "-fvisibility=hidden" "-fstack-protector" "-g3" "-U_FORTIFY_SOURCE" "-DNDEBUG" "-c" "-o/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/chacha-armv8-linux64.o" "/usr/local/cargo/registry/src/github.com-1ecc6299db9ec823/ring-0.16.19/pregenerated/chacha-armv8-linux64.S"
#18 62.62   running "aarch64-linux-gnu-gcc" "-O3" "-ffunction-sections" "-fdata-sections" "-fPIC" "-I" "include" "-Wall" "-Wextra" "-pedantic" "-pedantic-errors" "-Wall" "-Wextra" "-Wcast-align" "-Wcast-qual" "-Wconversion" "-Wenum-compare" "-Wfloat-equal" "-Wformat=2" "-Winline" "-Winvalid-pch" "-Wmissing-field-initializers" "-Wmissing-include-dirs" "-Wredundant-decls" "-Wshadow" "-Wsign-compare" "-Wsign-conversion" "-Wundef" "-Wuninitialized" "-Wwrite-strings" "-fno-strict-aliasing" "-fvisibility=hidden" "-fstack-protector" "-g3" "-U_FORTIFY_SOURCE" "-DNDEBUG" "-c" "-o/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/ecp_nistz256-armv8-linux64.o" "/usr/local/cargo/registry/src/github.com-1ecc6299db9ec823/ring-0.16.19/pregenerated/ecp_nistz256-armv8-linux64.S"
#18 62.62   running "aarch64-linux-gnu-gcc" "-O3" "-ffunction-sections" "-fdata-sections" "-fPIC" "-I" "include" "-Wall" "-Wextra" "-pedantic" "-pedantic-errors" "-Wall" "-Wextra" "-Wcast-align" "-Wcast-qual" "-Wconversion" "-Wenum-compare" "-Wfloat-equal" "-Wformat=2" "-Winline" "-Winvalid-pch" "-Wmissing-field-initializers" "-Wmissing-include-dirs" "-Wredundant-decls" "-Wshadow" "-Wsign-compare" "-Wsign-conversion" "-Wundef" "-Wuninitialized" "-Wwrite-strings" "-fno-strict-aliasing" "-fvisibility=hidden" "-fstack-protector" "-g3" "-U_FORTIFY_SOURCE" "-DNDEBUG" "-c" "-o/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/ghash-neon-armv8-linux64.o" "/usr/local/cargo/registry/src/github.com-1ecc6299db9ec823/ring-0.16.19/pregenerated/ghash-neon-armv8-linux64.S"
#18 62.62   running "aarch64-linux-gnu-gcc" "-O3" "-ffunction-sections" "-fdata-sections" "-fPIC" "-I" "include" "-Wall" "-Wextra" "-pedantic" "-pedantic-errors" "-Wall" "-Wextra" "-Wcast-align" "-Wcast-qual" "-Wconversion" "-Wenum-compare" "-Wfloat-equal" "-Wformat=2" "-Winline" "-Winvalid-pch" "-Wmissing-field-initializers" "-Wmissing-include-dirs" "-Wredundant-decls" "-Wshadow" "-Wsign-compare" "-Wsign-conversion" "-Wundef" "-Wuninitialized" "-Wwrite-strings" "-fno-strict-aliasing" "-fvisibility=hidden" "-fstack-protector" "-g3" "-U_FORTIFY_SOURCE" "-DNDEBUG" "-c" "-o/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/sha512-armv8-linux64.o" "/usr/local/cargo/registry/src/github.com-1ecc6299db9ec823/ring-0.16.19/pregenerated/sha512-armv8-linux64.S"
#18 62.62   running "aarch64-linux-gnu-gcc" "-O3" "-ffunction-sections" "-fdata-sections" "-fPIC" "-I" "include" "-Wall" "-Wextra" "-pedantic" "-pedantic-errors" "-Wall" "-Wextra" "-Wcast-align" "-Wcast-qual" "-Wconversion" "-Wenum-compare" "-Wfloat-equal" "-Wformat=2" "-Winline" "-Winvalid-pch" "-Wmissing-field-initializers" "-Wmissing-include-dirs" "-Wredundant-decls" "-Wshadow" "-Wsign-compare" "-Wsign-conversion" "-Wundef" "-Wuninitialized" "-Wwrite-strings" "-fno-strict-aliasing" "-fvisibility=hidden" "-fstack-protector" "-g3" "-U_FORTIFY_SOURCE" "-DNDEBUG" "-c" "-o/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/sha256-armv8-linux64.o" "/usr/local/cargo/registry/src/github.com-1ecc6299db9ec823/ring-0.16.19/pregenerated/sha256-armv8-linux64.S"
#18 62.62   running "aarch64-linux-gnu-gcc" "-O3" "-ffunction-sections" "-fdata-sections" "-fPIC" "-I" "include" "-Wall" "-Wextra" "-std=c1x" "-Wbad-function-cast" "-Wnested-externs" "-Wstrict-prototypes" "-pedantic" "-pedantic-errors" "-Wall" "-Wextra" "-Wcast-align" "-Wcast-qual" "-Wconversion" "-Wenum-compare" "-Wfloat-equal" "-Wformat=2" "-Winline" "-Winvalid-pch" "-Wmissing-field-initializers" "-Wmissing-include-dirs" "-Wredundant-decls" "-Wshadow" "-Wsign-compare" "-Wsign-conversion" "-Wundef" "-Wuninitialized" "-Wwrite-strings" "-fno-strict-aliasing" "-fvisibility=hidden" "-fstack-protector" "-g3" "-U_FORTIFY_SOURCE" "-DNDEBUG" "-c" "-o/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/aes_nohw.o" "crypto/fipsmodule/aes/aes_nohw.c"
#18 62.62   running "aarch64-linux-gnu-gcc" "-O3" "-ffunction-sections" "-fdata-sections" "-fPIC" "-I" "include" "-Wall" "-Wextra" "-std=c1x" "-Wbad-function-cast" "-Wnested-externs" "-Wstrict-prototypes" "-pedantic" "-pedantic-errors" "-Wall" "-Wextra" "-Wcast-align" "-Wcast-qual" "-Wconversion" "-Wenum-compare" "-Wfloat-equal" "-Wformat=2" "-Winline" "-Winvalid-pch" "-Wmissing-field-initializers" "-Wmissing-include-dirs" "-Wredundant-decls" "-Wshadow" "-Wsign-compare" "-Wsign-conversion" "-Wundef" "-Wuninitialized" "-Wwrite-strings" "-fno-strict-aliasing" "-fvisibility=hidden" "-fstack-protector" "-g3" "-U_FORTIFY_SOURCE" "-DNDEBUG" "-c" "-o/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/montgomery.o" "crypto/fipsmodule/bn/montgomery.c"
#18 62.62   running "aarch64-linux-gnu-gcc" "-O3" "-ffunction-sections" "-fdata-sections" "-fPIC" "-I" "include" "-Wall" "-Wextra" "-std=c1x" "-Wbad-function-cast" "-Wnested-externs" "-Wstrict-prototypes" "-pedantic" "-pedantic-errors" "-Wall" "-Wextra" "-Wcast-align" "-Wcast-qual" "-Wconversion" "-Wenum-compare" "-Wfloat-equal" "-Wformat=2" "-Winline" "-Winvalid-pch" "-Wmissing-field-initializers" "-Wmissing-include-dirs" "-Wredundant-decls" "-Wshadow" "-Wsign-compare" "-Wsign-conversion" "-Wundef" "-Wuninitialized" "-Wwrite-strings" "-fno-strict-aliasing" "-fvisibility=hidden" "-fstack-protector" "-g3" "-U_FORTIFY_SOURCE" "-DNDEBUG" "-c" "-o/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/montgomery_inv.o" "crypto/fipsmodule/bn/montgomery_inv.c"
#18 62.62   running "aarch64-linux-gnu-gcc" "-O3" "-ffunction-sections" "-fdata-sections" "-fPIC" "-I" "include" "-Wall" "-Wextra" "-std=c1x" "-Wbad-function-cast" "-Wnested-externs" "-Wstrict-prototypes" "-pedantic" "-pedantic-errors" "-Wall" "-Wextra" "-Wcast-align" "-Wcast-qual" "-Wconversion" "-Wenum-compare" "-Wfloat-equal" "-Wformat=2" "-Winline" "-Winvalid-pch" "-Wmissing-field-initializers" "-Wmissing-include-dirs" "-Wredundant-decls" "-Wshadow" "-Wsign-compare" "-Wsign-conversion" "-Wundef" "-Wuninitialized" "-Wwrite-strings" "-fno-strict-aliasing" "-fvisibility=hidden" "-fstack-protector" "-g3" "-U_FORTIFY_SOURCE" "-DNDEBUG" "-c" "-o/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/limbs.o" "crypto/limbs/limbs.c"
#18 62.62   running "aarch64-linux-gnu-gcc" "-O3" "-ffunction-sections" "-fdata-sections" "-fPIC" "-I" "include" "-Wall" "-Wextra" "-std=c1x" "-Wbad-function-cast" "-Wnested-externs" "-Wstrict-prototypes" "-pedantic" "-pedantic-errors" "-Wall" "-Wextra" "-Wcast-align" "-Wcast-qual" "-Wconversion" "-Wenum-compare" "-Wfloat-equal" "-Wformat=2" "-Winline" "-Winvalid-pch" "-Wmissing-field-initializers" "-Wmissing-include-dirs" "-Wredundant-decls" "-Wshadow" "-Wsign-compare" "-Wsign-conversion" "-Wundef" "-Wuninitialized" "-Wwrite-strings" "-fno-strict-aliasing" "-fvisibility=hidden" "-fstack-protector" "-g3" "-U_FORTIFY_SOURCE" "-DNDEBUG" "-c" "-o/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/mem.o" "crypto/mem.c"
#18 62.62   running "aarch64-linux-gnu-gcc" "-O3" "-ffunction-sections" "-fdata-sections" "-fPIC" "-I" "include" "-Wall" "-Wextra" "-std=c1x" "-Wbad-function-cast" "-Wnested-externs" "-Wstrict-prototypes" "-pedantic" "-pedantic-errors" "-Wall" "-Wextra" "-Wcast-align" "-Wcast-qual" "-Wconversion" "-Wenum-compare" "-Wfloat-equal" "-Wformat=2" "-Winline" "-Winvalid-pch" "-Wmissing-field-initializers" "-Wmissing-include-dirs" "-Wredundant-decls" "-Wshadow" "-Wsign-compare" "-Wsign-conversion" "-Wundef" "-Wuninitialized" "-Wwrite-strings" "-fno-strict-aliasing" "-fvisibility=hidden" "-fstack-protector" "-g3" "-U_FORTIFY_SOURCE" "-DNDEBUG" "-c" "-o/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/poly1305.o" "crypto/poly1305/poly1305.c"
#18 62.62   running "aarch64-linux-gnu-gcc" "-O3" "-ffunction-sections" "-fdata-sections" "-fPIC" "-I" "include" "-Wall" "-Wextra" "-std=c1x" "-Wbad-function-cast" "-Wnested-externs" "-Wstrict-prototypes" "-pedantic" "-pedantic-errors" "-Wall" "-Wextra" "-Wcast-align" "-Wcast-qual" "-Wconversion" "-Wenum-compare" "-Wfloat-equal" "-Wformat=2" "-Winline" "-Winvalid-pch" "-Wmissing-field-initializers" "-Wmissing-include-dirs" "-Wredundant-decls" "-Wshadow" "-Wsign-compare" "-Wsign-conversion" "-Wundef" "-Wuninitialized" "-Wwrite-strings" "-fno-strict-aliasing" "-fvisibility=hidden" "-fstack-protector" "-g3" "-U_FORTIFY_SOURCE" "-DNDEBUG" "-c" "-o/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/crypto.o" "crypto/crypto.c"
#18 62.62   running "aarch64-linux-gnu-gcc" "-O3" "-ffunction-sections" "-fdata-sections" "-fPIC" "-I" "include" "-Wall" "-Wextra" "-std=c1x" "-Wbad-function-cast" "-Wnested-externs" "-Wstrict-prototypes" "-pedantic" "-pedantic-errors" "-Wall" "-Wextra" "-Wcast-align" "-Wcast-qual" "-Wconversion" "-Wenum-compare" "-Wfloat-equal" "-Wformat=2" "-Winline" "-Winvalid-pch" "-Wmissing-field-initializers" "-Wmissing-include-dirs" "-Wredundant-decls" "-Wshadow" "-Wsign-compare" "-Wsign-conversion" "-Wundef" "-Wuninitialized" "-Wwrite-strings" "-fno-strict-aliasing" "-fvisibility=hidden" "-fstack-protector" "-g3" "-U_FORTIFY_SOURCE" "-DNDEBUG" "-c" "-o/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/curve25519.o" "crypto/curve25519/curve25519.c"
#18 62.62   running "aarch64-linux-gnu-gcc" "-O3" "-ffunction-sections" "-fdata-sections" "-fPIC" "-I" "include" "-Wall" "-Wextra" "-std=c1x" "-Wbad-function-cast" "-Wnested-externs" "-Wstrict-prototypes" "-pedantic" "-pedantic-errors" "-Wall" "-Wextra" "-Wcast-align" "-Wcast-qual" "-Wconversion" "-Wenum-compare" "-Wfloat-equal" "-Wformat=2" "-Winline" "-Winvalid-pch" "-Wmissing-field-initializers" "-Wmissing-include-dirs" "-Wredundant-decls" "-Wshadow" "-Wsign-compare" "-Wsign-conversion" "-Wundef" "-Wuninitialized" "-Wwrite-strings" "-fno-strict-aliasing" "-fvisibility=hidden" "-fstack-protector" "-g3" "-U_FORTIFY_SOURCE" "-DNDEBUG" "-c" "-o/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/ecp_nistz.o" "crypto/fipsmodule/ec/ecp_nistz.c"
#18 62.62   running "aarch64-linux-gnu-gcc" "-O3" "-ffunction-sections" "-fdata-sections" "-fPIC" "-I" "include" "-Wall" "-Wextra" "-std=c1x" "-Wbad-function-cast" "-Wnested-externs" "-Wstrict-prototypes" "-pedantic" "-pedantic-errors" "-Wall" "-Wextra" "-Wcast-align" "-Wcast-qual" "-Wconversion" "-Wenum-compare" "-Wfloat-equal" "-Wformat=2" "-Winline" "-Winvalid-pch" "-Wmissing-field-initializers" "-Wmissing-include-dirs" "-Wredundant-decls" "-Wshadow" "-Wsign-compare" "-Wsign-conversion" "-Wundef" "-Wuninitialized" "-Wwrite-strings" "-fno-strict-aliasing" "-fvisibility=hidden" "-fstack-protector" "-g3" "-U_FORTIFY_SOURCE" "-DNDEBUG" "-c" "-o/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/ecp_nistz256.o" "crypto/fipsmodule/ec/ecp_nistz256.c"
#18 62.62   running "aarch64-linux-gnu-gcc" "-O3" "-ffunction-sections" "-fdata-sections" "-fPIC" "-I" "include" "-Wall" "-Wextra" "-std=c1x" "-Wbad-function-cast" "-Wnested-externs" "-Wstrict-prototypes" "-pedantic" "-pedantic-errors" "-Wall" "-Wextra" "-Wcast-align" "-Wcast-qual" "-Wconversion" "-Wenum-compare" "-Wfloat-equal" "-Wformat=2" "-Winline" "-Winvalid-pch" "-Wmissing-field-initializers" "-Wmissing-include-dirs" "-Wredundant-decls" "-Wshadow" "-Wsign-compare" "-Wsign-conversion" "-Wundef" "-Wuninitialized" "-Wwrite-strings" "-fno-strict-aliasing" "-fvisibility=hidden" "-fstack-protector" "-g3" "-U_FORTIFY_SOURCE" "-DNDEBUG" "-c" "-o/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/gfp_p256.o" "crypto/fipsmodule/ec/gfp_p256.c"
#18 62.62   running "aarch64-linux-gnu-gcc" "-O3" "-ffunction-sections" "-fdata-sections" "-fPIC" "-I" "include" "-Wall" "-Wextra" "-std=c1x" "-Wbad-function-cast" "-Wnested-externs" "-Wstrict-prototypes" "-pedantic" "-pedantic-errors" "-Wall" "-Wextra" "-Wcast-align" "-Wcast-qual" "-Wconversion" "-Wenum-compare" "-Wfloat-equal" "-Wformat=2" "-Winline" "-Winvalid-pch" "-Wmissing-field-initializers" "-Wmissing-include-dirs" "-Wredundant-decls" "-Wshadow" "-Wsign-compare" "-Wsign-conversion" "-Wundef" "-Wuninitialized" "-Wwrite-strings" "-fno-strict-aliasing" "-fvisibility=hidden" "-fstack-protector" "-g3" "-U_FORTIFY_SOURCE" "-DNDEBUG" "-c" "-o/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/gfp_p384.o" "crypto/fipsmodule/ec/gfp_p384.c"
#18 62.62 
#18 62.62 
#18 62.62   error occurred: Command "aarch64-linux-musl-ar" "cq" "/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/libring-core.a" "/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/aesv8-armx-linux64.o" "/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/ghashv8-armx-linux64.o" "/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/vpaes-armv8-linux64.o" "/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/armv8-mont-linux64.o" "/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/chacha-armv8-linux64.o" "/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/ecp_nistz256-armv8-linux64.o" "/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/ghash-neon-armv8-linux64.o" "/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/sha512-armv8-linux64.o" "/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/sha256-armv8-linux64.o" "/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/aes_nohw.o" "/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/montgomery.o" "/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/montgomery_inv.o" "/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/limbs.o" "/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/mem.o" "/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/poly1305.o" "/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/crypto.o" "/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/curve25519.o" "/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/ecp_nistz.o" "/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/ecp_nistz256.o" "/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/gfp_p256.o" "/usr/src/content-manager/target/aarch64-unknown-linux-musl/release/build/ring-ce2ec03868462ce3/out/gfp_p384.o" with args "aarch64-linux-musl-ar" did not execute successfully (status code exit code: 127).
#18 62.62 
#18 62.62 

我不太了解 C 编译器的所有风格以及我需要什么组合才能使其正常工作,但看起来(希望)我只需要一个小的配置或环境变量更改就能够编译所有我在 aarch64 上需要的包。希望有人可以向我指出一些相关文档或为我提供示例或答案,以了解需要将哪些环境变量设置为什么值才能使其正常工作。

Cargo.toml

[package]
name = "app"
version = "0.1.0"
authors = ["Marcus Ruddick"]
edition = "2018"

[dependencies]
ring = "0.16.19"

Dockerfile

FROM rust as builder
ARG APP_NAME="app"
ARG TARGET="aarch64-unknown-linux-musl"
ARG GITHUB_SSH_KEY=""
RUN apt-get update
RUN apt-get install gcc-aarch64-linux-gnu -y
RUN rustup target add $TARGET;
RUN mkdir /usr/src/$APP_NAME
WORKDIR /usr/src/$APP_NAME

ENV CARGO_NET_GIT_FETCH_WITH_CLI=true
ENV TARGET_CC=aarch64-linux-gnu-gcc

COPY Cargo.toml Cargo.lock ./
COPY ./src ./src

RUN mkdir /root/.ssh/
RUN echo "$GITHUB_SSH_KEY" > /root/.ssh/id_rsa;
RUN chmod 400 /root/.ssh/id_rsa
RUN ssh-keyscan -H github.com >> /etc/ssh/ssh_known_hosts

RUN cargo build --release --target=$TARGET
RUN groupadd -g 10001 -r $APP_NAME
RUN useradd -r -g $APP_NAME -u 10001 $APP_NAME

# ------------------------------------------------------------------------------

FROM scratch
ARG APP_NAME="app"
ARG TARGET="aarch64-unknown-linux-musl"
WORKDIR /user/local/bin/
COPY --from=0 /etc/passwd /etc/passwd
COPY --from=builder /usr/src/$APP_NAME/target/$TARGET/release/$APP_NAME ./app
USER $APP_NAME

CMD ["./app"]

构建命令

$ docker buildx build --load --platform=linux/arm64 -t myrepo/mytag:arm-0.0.1 .

【问题讨论】:

  • 快速提问:为什么要编译 aarch64-unknown-linux-musl 而不是 aarch64-unknown-linux-gnu?这对我来说在 aarch64 上工作得很好,根据 github.com/briansmith/ring/issues/713 的说法,为 musl libc 编译可能仍然存在一些问题。
  • @HHK 为aarch64-unknown-linux-gnu 编译在尝试从临时容器运行二进制文件时不起作用,我需要一个静态链接的二进制文件,如 musl 生成的,否则如果我尝试运行容器我收到以下错误standard_init_linux.go:219: exec user process caused: no such file or directory,因为暂存容器中不存在动态链接库
  • 你能运行RUST_BACKTRACE=1 吗?在 gcc 方面,您有 this。你试过rebooting吗?
  • 请添加适当的回溯,因为我们只能从中猜测。

标签: c docker rust cross-compiling arm64


【解决方案1】:

在复制this file 中提到的here 中的环境变量后,我能够让它工作

我更新后的 Dockerfile 如下所示

FROM rust as builder
ARG APP_NAME="app"
ARG TARGET="aarch64-unknown-linux-musl"
ARG GITHUB_SSH_KEY=""
RUN apt-get update
RUN apt-get install clang llvm -y
RUN rustup target add $TARGET
RUN mkdir /usr/src/$APP_NAME
WORKDIR /usr/src/$APP_NAME

ENV CARGO_NET_GIT_FETCH_WITH_CLI=true

ENV CC_aarch64_unknown_linux_musl=clang
ENV AR_aarch64_unknown_linux_musl=llvm-ar
ENV CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_RUSTFLAGS="-Clink-self-contained=yes -Clinker=rust-lld"
ENV CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_RUNNER="qemu-aarch64 -L /usr/aarch64-linux-gnu"

COPY Cargo.toml Cargo.lock ./
COPY ./src ./src

RUN mkdir /root/.ssh/
RUN echo "$GITHUB_SSH_KEY" > /root/.ssh/id_rsa;
RUN chmod 400 /root/.ssh/id_rsa
RUN ssh-keyscan -H github.com >> /etc/ssh/ssh_known_hosts

RUN cargo build --release --target=$TARGET
RUN groupadd -g 10001 -r $APP_NAME
RUN useradd -r -g $APP_NAME -u 10001 $APP_NAME

# ------------------------------------------------------------------------------

FROM scratch
ARG APP_NAME="app"
ARG TARGET="aarch64-unknown-linux-musl"
WORKDIR /user/local/bin/
COPY --from=0 /etc/passwd /etc/passwd
COPY --from=builder /usr/src/$APP_NAME/target/$TARGET/release/$APP_NAME ./app
USER $APP_NAME

CMD ["./app"]

通过此设置,二进制文件可以从暂存容器中编译和运行,感谢 @HHK 为我指出有关此主题的未解决问题

【讨论】:

    【解决方案2】:

    我使用rust-musl-builder 解决了“无法为环运行自定义构建命令”问题。

    这是我所做的:

    1. 将目标添加到 rust 工具链:
    rustup target add x86_64-unknown-linux-musl
    
    1. 定义别名以运行 docker 容器
    alias rust-musl-builder='docker run --rm -it -v "$(pwd)":/home/rust/src ekidd/rust-musl-builder'
    
    1. 使用容器构建您的项目
    rust-musl-builder cargo build --release
    

    以下是支持的目标列表:https://doc.rust-lang.org/rustc/platform-support.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-27
      • 1970-01-01
      • 2016-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多