[英]Cross compile shared library for armv5te-unknown-linux-gnueabi Rust [Mindstorm Ev3dev]
參數:
(目標是運行來自Ev3dev的 linux 圖像的 Lego Mindstorm)
貨物配置:
[package]
name = "ev3"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
jni = "0.19"
ev3dev-lang-rust = { version = "0.12.1", features=["screen"]}
jni_proc_macro= {path= "./jni_proc_macro"}
[lib]
crate-type= ["cdylib"]
[workspace]
members= ["jni_proc_macro"]
構建配置:
[build]
target = "armv5te-unknown-linux-gnueabi"
[target.armv5te-unknown-linux-gnueabi]
linker = "rust-lld"
構建錯誤:
error: linking with `rust-lld` failed: exit code: 1
|
= note: {...}
= note: rust-lld: error: unable to find library -lgcc_s
rust-lld: error: unable to find library -lutil
rust-lld: error: unable to find library -lrt
rust-lld: error: unable to find library -lpthread
rust-lld: error: unable to find library -lm
rust-lld: error: unable to find library -ldl
rust-lld: error: unable to find library -lc
error: could not compile `ev3` due to previous error
由於錯誤表明 linker 缺少庫。 我沒有找到可以下載和/或提供這些依賴項的明確解決方案。
我的問題是,A 是否有不同的方法來成功構建它,或者 B 我如何解決這些依賴關系。
結果需要是 linux 和 armv5te 的共享庫(.so)
(一切都在 wsl/linux 中完成)
在貨物上安裝十字架
cargo install cross --git https://github.com/cross-rs/cross
安裝 docker
克隆交叉存儲庫
導航到 docker 文件夾
創建一個名為“Dockerfile.armv5te-unknown-linux-gnueabi-cross”的新文件
將其粘貼到新文件中:
FROM ubuntu:16.04
ARG DEBIAN_FRONTEND=noninteractive
COPY common.sh lib.sh /
RUN /common.sh
COPY cmake.sh /
RUN /cmake.sh
COPY xargo.sh /
RUN /xargo.sh
RUN apt-get update && apt-get install --assume-yes --no-install-recommends \
g++-arm-linux-gnueabi \
crossbuild-essential-armel \
libc6-dev-armel-cross
COPY deny-debian-packages.sh /
RUN TARGET_ARCH=armel /deny-debian-packages.sh \
binutils \
binutils-arm-linux-gnueabi
# Qemu is disabled since we've changed the scripts to require newer Python versions.
#COPY qemu.sh /
#RUN /qemu.sh arm
COPY qemu-runner base-runner.sh /
ENV CROSS_TOOLCHAIN_PREFIX=arm-linux-gnueabi-
ENV CROSS_SYSROOT=/usr/arm-linux-gnueabi
ENV CARGO_TARGET_ARMV5TE_UNKNOWN_LINUX_GNUEABI_LINKER="$CROSS_TOOLCHAIN_PREFIX"gcc \
CARGO_TARGET_ARMV5TE_UNKNOWN_LINUX_GNUEABI_RUNNER="/qemu-runner arm" \
AR_armv5te_unknown_linux_gnueabi="$CROSS_TOOLCHAIN_PREFIX"ar \
CC_armv5te_unknown_linux_gnueabi="$CROSS_TOOLCHAIN_PREFIX"gcc \
CXX_armv5te_unknown_linux_gnueabi="$CROSS_TOOLCHAIN_PREFIX"g++ \
BINDGEN_EXTRA_CLANG_ARGS_armv5te_unknown_linux_gnueabi="--sysroot=$CROSS_SYSROOT" \
QEMU_LD_PREFIX="$CROSS_SYSROOT" \
RUST_TEST_THREADS=1 \
PKG_CONFIG_PATH="/usr/lib/arm-linux-gnueabi/pkgconfig/:${PKG_CONFIG_PATH}"
確保項目使用“LF”換行符。 如果不是這樣可以解決它。
在克隆存儲庫的根目錄中使用以下命令編譯自定義 cross/docker 構建:
cargo build-docker-image armv5te-unknown-linux-gnueabi-cross
這將創建一個新的 docker 圖像,用於編譯 rust 代碼。
然后導航到您的目標項目文件夾並運行:
export CROSS_TARGET_ARMV5TE_UNKNOWN_LINUX_GNUEABI_IMAGE=ghcr.io/cross-rs/armv5te-unknown-linux-gnueabi-cross:local
(不要關閉這個終端)
現在將以下內容添加到 Cargo.toml 文件中:
[package.metadata.cross.build]
default-target = "armv5te-unknown-linux-gnueabi"
現在你可以運行:
cross build
可以使用許多貨物選項,如“--release”(有關更多信息,請查看 cross in the credits)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.