首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >交叉编译共享库的armv5te-未知-linux-gnueabi Rust [Mindstorm Ev3dev]

交叉编译共享库的armv5te-未知-linux-gnueabi Rust [Mindstorm Ev3dev]
EN

Stack Overflow用户
提问于 2022-11-18 15:56:06
回答 1查看 62关注 0票数 0

参数:

  • source = x86_x64 windows 10或x86_x64 linux (ubuntu )
  • target = armv5te linux
  • target_type = cdylib
  • target_glibc = 2.24
  • 语言=生锈
  • build_tool =货物
  • 编译器= rustc

(目标是运行来自Ev3dev的linux映像的乐高头脑风暴)

货物配置:

代码语言:javascript
运行
复制
[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"]

构建配置:

代码语言:javascript
运行
复制
[build]
target = "armv5te-unknown-linux-gnueabi"

[target.armv5te-unknown-linux-gnueabi]
linker = "rust-lld"

生成错误:

代码语言:javascript
运行
复制
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和armv5te的共享库(.so)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-23 14:54:04

要求

  • 安装了wsl或linux
  • 货物和锈蚀装置

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

准备/建造

在货物上安装十字

代码语言:javascript
运行
复制
cargo install cross --git https://github.com/cross-rs/cross

安装码头

克隆交叉存储库

导航到“停靠”文件夹

创建一个名为"Dockerfile.armv5te-unknown-linux-gnueabi-cross“的新文件

将其粘贴到新文件中:

代码语言:javascript
运行
复制
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“换行符。如果不是,会修复它。

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

代码语言:javascript
运行
复制
cargo build-docker-image armv5te-unknown-linux-gnueabi-cross

这将创建一个新的码头映像,将用于编译锈蚀代码。

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

代码语言:javascript
运行
复制
export CROSS_TARGET_ARMV5TE_UNKNOWN_LINUX_GNUEABI_IMAGE=ghcr.io/cross-rs/armv5te-unknown-linux-gnueabi-cross:local

(不要关闭这个终端)

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

代码语言:javascript
运行
复制
[package.metadata.cross.build]
default-target = "armv5te-unknown-linux-gnueabi"

现在你可以跑了:

代码语言:javascript
运行
复制
cross build 

许多货物选项,如“-释放”可以使用(更多的信息,看看交叉信贷)

学分

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74492239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档