Login
网站首页 > 文章中心 > 其它

交叉编译armv5te-unknown-linux-gnueabi Rust的共享库[Mindstorm Ev3 dev]

作者:小编 更新时间:2023-06-08 17:11:22 浏览量:46人看过

交叉编译armv5te-unknown-linux-gnueabi Rust的共享库[Mindstorm Ev3 dev]

软件介绍:源代码= x86_x64 windows 10或x86_x64 linux(ubuntu wsl)目标= armv 5 te Linux目标类型= cdylib...

源代码= x86_x64 windows 10或x86_x64 linux(ubuntu wsl)

目标= armv 5 te Linux

目标类型= cdylib

目标_glibc = 2.24

语言=生 rust

构建工具=货物

编译器= rustc

(The目标是运行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

正如错误所示,链接器缺少库。我没有找到明确的解决方案,我可以下载和/或提供这些依赖项。

我的问题是,A有没有不同的方法来成功地构建它,或者B我如何解决这些依赖关系。

结果需要是linux和armv 5 te的共享库(.so)。


要求

已安装wsl或linux

货物和 rust eclipse 已安装

(所有的事情都是在wsl/linux中完成的)


准备/构建

在货物上安装十字架


cargo install cross --git https://github.com/cross-rs/cross

安装扩展坞

克隆跨存储库

导航到Docker文件夹

创建一个名为“Dockerfile. armv 5 te-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”换行符。如果不是this修复它。

在克隆的存储库的根目录中使用以下命令编译自定义cross/docker构建:


cargo build-docker-image arm5te-unknown-linux-gnueabi-cross

这将创建一个新的docker映像,用于编译rust代码。

然后导航到目标项目文件夹并运行:


export CROSS_TARGET_ARMV5TE_UNKNOWN_LINUX_GNUEABI_IMAGE=ghcr.io/cross-rs/armv5te-unknown-linux-gnueabi-cross:local

(Do不关闭此终端)

现在将以下内容添加到Cargo.toml文件中:


[package.metadata.cross.build]

default-target = "armv5te-unknown-linux-gnueabi"

现在您可以运行:


cross build

许多货物选项,如“--release”可以使用(更多信息,请看信用卡中的交叉)


学分

MeetTitan(堆栈溢出),他建议我使用cross

Cross project(GitHub),为整个解决方案提供支持

Custom cross version discussion(跨Github)

Alexhuszagh(Cross Github),他向我展示了如何构建一个自定义的跨版本

Emilgardis(Cross Github)解释了换行错误


版权声明:倡导尊重与保护知识产权,本站有部分资源、图片来源于网络,如有侵权,请联系我们修改或者删除处理。
转载请说明来源于"土嘎嘎" 本文地址:http://www.tugaga.com/jishu/other/268.html
<<上一篇 2023-06-08
下一篇 >> 2023-06-08

编辑推荐

热门文章