精华内容
下载资源
问答
  • 2021-05-14 15:21:34

    我正在使用

    Windows 10.我想交叉编译一个Rust程序,以便在armv7-unknown-linux-gnueabihf上运行. (armv7-unknown-linux-muscl也可以接受,但似乎没有.)

    这是我的步骤:

    >安装rustup

    > rustup toolchain install stable-x86_64-pc-windows-gnu

    > rustup toolchain默认stable-x86_64-pc-windows-gnu

    > rustup target添加armv7-unknown-linux-gnueabihf

    >编辑我的./cargo/config文件以包含:

    [build]

    target = "armv7-unknown-linux-gnueabihf"

    >货物建造

    这可以很好地编译所有内容,但是当涉及链接时会出现此错误:

    error: could not exec the linker `cc`: The system cannot find the file specified. (os error 2)

    据我所知,这是因为Rust没有自己的链接器而是使用GCC.显然我需要自己提供并将其添加到./cargo/config文件中:

    [target.armv7-unknown-linux-gnueabihf]

    linker = "c:/path/to/my/gcc/cross/compiler"

    是对的吗?如果是这样,我可以在地球上下载这样的Windows交叉编译器,为什么不进行生锈安装呢?必须自己编译GCC的交叉编译版本是交叉编译C/C++程序的最大痛苦. Rustup真的不会让这更容易吗?

    更多相关内容
  • 安装最新版本Rust ...打开windows cmd 运行rustup-init.exe,按照提示安装C:\Software>rustup-init.exe 安装 x86_64-unknown-linux-musl target rustup target add x86_64-unknown-linux-musl

    安装最新版本Rust(可选)

    1. 访问官网 https://www.rust-lang.org/tools/install
    2. 点击 DOWNLOAD RUSTUP-INIT.EXE (64-BIT)下载Rust安装工具
    3. 打开windows cmd
    4. 运行rustup-init.exe,按照提示安装
    rustup-init.exe
    

    升级Rust到最新版本(可选)

    rustup update
    

    安装 x86_64-unknown-linux-musl target

    rustup target add x86_64-unknown-linux-musl
    

    修改cargo配置

    1. 打开或新建用户目录下/.cargo/config文件
    2. 在文件中增加配置
    [target.x86_64-unknown-linux-musl]
    linker = "rust-lld"
    
    1. 保存退出

    交叉编译

    cargo build --target x86_64-unknown-linux-musl
    

    参考文章

    展开全文
  • 之前我没有试过 C++ 之外的交叉编译环境,以前在用 C++ 开发游戏的时候,会把逻辑代码用 Android Studio 编译出安卓版本,以及使用 iOS 的 toolchain 编译成 iOS 的版本。假如没有对应的 toolchain 的话,我可能也就...

    之前我没有试过 C++ 之外的交叉编译环境,以前在用 C++ 开发游戏的时候,会把逻辑代码用 Android Studio 编译出安卓版本,以及使用 iOS 的 toolchain 编译成 iOS 的版本。

    假如没有对应的 toolchain 的话,我可能也就束手无策了,我还没折腾过用 https://github.com/richfelker/musl-cross-make 这个工具进行交叉编译,不过今天在学 Rust 的时候,发现交叉编译 Rust 程序的步骤非常简单,就先记在这里。

    这里我只用 macOS 来示范,因为今天只在这个平台上试过。

    安装链接器

    musl-cross 似乎是在链接时候起作用的(不知道我这个说法对不对)。

    首先通过 brew 安装 musl-cross 工具,其中 musl-cross 是用来专门编译到 linux 的工具链,而 mingw-w64 是用来编译到 windows 的工具链。根据你的目标平台自己装一个就好。

    $brew install FiloSottile/musl-cross/musl-cross

    $brew install mingw-w64

    我装的是 musl-cross,装好后到 ~/.cargo/config 文件中添加上:

    [target.x86_64-unknown-linux-musl]

    linker = "x86_64-linux-musl-gcc"

    注意一下等于号后面跟的是 x86_64-linux-musl-gcc。

    rustup 配置

    rustup 是 Rust 的包管理工具,用它来配置工具链可以很省心。

    运行 rustup target list 你可以看到很多的目标平台。

    $ rustup target list

    aarch64-apple-ios

    aarch64-linux-android

    aarch64-unknown-fuchsia

    aarch64-unknown-linux-gnu

    aarch64-unknown-linux-musl

    arm-linux-androideabi

    arm-unknown-linux-gnueabi

    arm-unknown-linux-gnueabihf

    arm-unknown-linux-musleabi

    arm-unknown-linux-musleabihf

    armv5te-unknown-linux-gnueabi

    armv5te-unknown-linux-musleabi

    armv7-apple-ios

    armv7-linux-androideabi

    armv7-unknown-linux-gnueabihf

    armv7-unknown-linux-musleabihf

    armv7s-apple-ios

    asmjs-unknown-emscripten

    i386-apple-ios

    i586-pc-windows-msvc

    i586-unknown-linux-gnu

    i586-unknown-linux-musl

    i686-apple-darwin

    i686-linux-android

    i686-pc-windows-gnu

    i686-pc-windows-msvc

    i686-unknown-freebsd

    i686-unknown-linux-gnu

    i686-unknown-linux-musl

    mips-unknown-linux-gnu

    mips-unknown-linux-musl

    mips64-unknown-linux-gnuabi64

    mips64el-unknown-linux-gnuabi64

    mipsel-unknown-linux-gnu

    mipsel-unknown-linux-musl

    powerpc-unknown-linux-gnu

    powerpc64-unknown-linux-gnu

    powerpc64le-unknown-linux-gnu

    s390x-unknown-linux-gnu

    sparc64-unknown-linux-gnu

    sparcv9-sun-solaris

    thumbv6m-none-eabi

    thumbv7em-none-eabi

    thumbv7em-none-eabihf

    thumbv7m-none-eabi

    wasm32-unknown-emscripten

    wasm32-unknown-unknown

    x86_64-apple-darwin (default)

    x86_64-apple-ios

    x86_64-linux-android

    x86_64-pc-windows-gnu

    x86_64-pc-windows-msvc

    x86_64-rumprun-netbsd

    x86_64-sun-solaris

    x86_64-unknown-cloudabi

    x86_64-unknown-freebsd

    x86_64-unknown-fuchsia

    x86_64-unknown-linux-gnu

    x86_64-unknown-linux-gnux32

    x86_64-unknown-linux-musl

    x86_64-unknown-netbsd

    x86_64-unknown-redox

    我们之前只设置了 target.x86_64-unknown-linux-musl,所以现在也只装对应的这个目标平台相关工具:

    $ rustup target add x86_64-unknown-linux-musl

    这一步如果很慢可以在你的 .bashrc 或者 .zshrc 中添加这一行,中科大的源加速很靠谱:

    exportRUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static

    编译

    接着只要在运行 build 命令时指定 target 就可以了。

    $ cargo build --target=x86_64-unknown-linux-musl

    接着你可以看到类似这样的文件结构:

    ├── build

    └── target

    └── x86_64-unknown-linux-musl

    └── debug

    ├── build

    ├── deps

    ├── examples

    ├── incremental

    └── native

    找到你对应编译好的可执行文件,扔到你的 linux 机子上跑,就可以了。

    你可以用 file 命令确认一下:

    $ file target/x86_64-unknown-linux-musl/debug/rust-test

    target/x86_64-unknown-linux-musl/debug/rust-test: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, with debug_info, not stripped

    展开全文
  • Rust交叉编译分享

    2021-01-14 10:50:09
    时间过得好快,转眼间2020年了,想起第一次接触rust的时候还是2019年7月底。当时真是惊艳到我了,于是就走上了不归路。rust特性这里就不多说什么了,官网,社区,知乎多的是介绍和资源,再说我rust水平也没多高。...

    时间过得好快,转眼间2020年了,想起第一次接触rust的时候还是2019年7月底。当时真是惊艳到我了,于是就走上了不归路。

    rust特性这里就不多说什么了,官网,社区,知乎多的是介绍和资源,再说我rust水平也没多高。

    最近一段时间一直用rust写东西,主要是游戏服务器相关的东西,偶尔的机会,现在能让我用rust在工作当中,这tm把老夫给高兴坏了,那不tm整起来?

    一顿啪啪啪,把之前写的加上优化调优,测试,压测再调优再....反复多次后,项目写得差不多了,因为是游戏服务器,那么目标是跑在linux系统的,然后win或者MacOS下面写的代码就要撸到linux上面跑。

    高级语言写惯了的朋友可能知道交叉编译是个啥,但也许认知没有那么深刻,真正去搞的时候,还是会有坑的,在此我分享一下我的坑,希望能帮助到人。

    总所周知,高级语言往往都带有比较大的运行时,比如虚拟机,比如各种VM,因为你的程序是vm在维护,你只需要写vm认识的东西就好了,然后在目标OS上装对应版本的VM,那么,其他的就不用管了,典型的例子就上JVM,只要有字节码,就行。

    那么像c/c++/rust这类的是不是写好了代码编译下就行了呢,当然行,但也只能在你本机上行,不过没任何准备,想跑在别的系统,是不可以的。

    所以就出现了我们在win(或者linux,macOS)上面上面写的代码,直接编译到本机,或者linux,macOS,unix,然后把编译好的可执行文件传过去就能运行,这就是交叉编译。

    官网有交叉编译的教程:Configuration - The Cargo Book​doc.rust-lang.org

    跟着配置就行了,那么除了rust自带的工具以外,我们要做什么呢?

    去下载相关target的工具链:musl libc toolchains | static cross/native toolchains​musl.cc

    下载好了之后,配置好环境变量,可以让你的rust能直接访问,打个完整的比方,我要把macOS写的编译到linux,怎么弄呢?

    1:配置好.cargo/config,在上面配好target,比如

    [target.x86_64-unknown-linux-musl]

    linker = "x86_64-linux-musl-gcc"

    2:去上面的http://musl.cc把对应的x86_64-unknown-linux-musl-cross.tgz下好,然后编辑".bash_profile"在末尾加上这句

    export PATH="$PATH:$HOME/code/tool/x86_64-linux-musl-cross/bin"

    友情提示,“$PATH:”这个一定要加哦,不然直接覆盖了之前的环境配置,只要执行source .bash_profile,那么你一大堆命令将无法执行(也不是无法执行,只是无法直接调用了,要用绝对路径调用)

    3.然后敲命令行“x86_64-linux-musl-gcc -v”,会输出一大堆乱七八糟的,看最后的版本号就行,有它,你就可以点根烟犒劳下自己了。

    如果有问题,检查下,是不是下错了?如果是mac要下mac下对应的x86_64-unknown-linux-musl-cross.tgz,以此类推,如果下错则嗝屁,编译的时候,一大堆错误信息在床上摆好姿势等着你。

    4.用rustup命令把你要编译到的target下载好,这个很简单,除了断网,和小水管,不会出问题的,如果不知道rust是否支持你要编译到的目标平台,用rustup target list看下就知道了。

    5.执行“cargo build --release --targetx86_64-unknown-linux-musl”

    然后就可以在target目录里面看到编译好的可执行的目标目录了,进去就有你要看到的东西。

    可能有朋友想问,为什么我用rustup下载好了对应目标平台的东西,还要去http://musl.cc去下另外一个呢?还要配置环境变量。

    答案是:rustup下载的,和http://musl.cc下载的是不同的,你可以到rustup的目录,然后进toolchains里面看看,再到从http://must.cc下载的工具链里面看看,就知道,前者是一些rust自身对target的支持,而后者,则是交叉编译的关键,里面各种target的编译库和可执行文件。

    其实官方团队做了一个工具,cross,挺好用,但是我发现,当我在项目里面引用自己的本地库时,居然识别不了路径,直接识别成“/”目录下的,我配置的是相对路径,我倒腾了几下没搞定,算了,干脆自己下工具链搞好了。当然还有xargo啊之类的工具,不一一说了,

    另外,有什么问题,自己解决不了的,推荐去官方社区寻求帮助,rust社区真挺好的。大家互助才能让社区更加健康,稳定,发展。

    好了,就写到这儿,希望能帮到刚入门,刚接触交叉编译的同学。

    下班了,回家,文中如有不对,请指正。

    展开全文
  • 1. 添加 x86编译链接器 ...继续沿用C# 调用 Rust 库文中的项目代码,编译出x86 版本的库 输入命令 cargo build --release --target i686-pc-windows-msvc PS:如果执行了rustup target add i...
  • 基本上我正在Linux开发时,将最简单的代码编译Windows。fn main() {println!("Hello, and bye.")}我通过搜索互联网找到这些命令:rustc --target=i686-w64-mingw32-gcc main.rsrustc --target=i686_pc_windows_gnu...
  • Basically I'm trying to compile the simplest code to Windows while I am developing on Linux.fn main() {println!("Hello, and bye.")}I found these commands by searching the internet:rustc --target=i686-...
  • 什么是交叉编译?可能有的同学不理解。我这里简单介绍下,所谓交叉编译,就是在一个平台上可以编译生成另一个平台的可执行文件。这节课主要介绍如何在Windows系统上编译生成Linux系统的可执行文件。 0x01 准备工作 ...
  • Rust 交叉编译

    2022-02-18 12:01:33
    Rust - 交叉编译安装链接器rustup 配置编译 安装链接器 根据你的目标平台自己装一个就好。 1.1 Mac: 通过 brew 安装 musl-cross 工具 来专门编译到 linux 的工具链。 $ brew install FiloSottile/musl-cross/musl-...
  • [编译工具]rust交叉编译的使用方法

    千次阅读 2019-04-28 09:32:00
    这时就需要用到交叉编译,把本地电脑的程序通过交叉编译环境编译成线上服务对应系统版本的可执行程序。 大致过程就是这样的 本地系统:mac系统 目标系统:centos(linux)系统 语言:rust 具体操作步骤如下 1)安装...
  • Windows环境下交叉编译Linux程序使用musl与gnu 两种target方式的区别在Windows 10 配置Rust交叉编译Linux应用程序-musl这篇配置target=x86_64-unknown-linux-musl时已经解释了,gnu使用动态链接,目标服务器(部署...
  • rust交叉编译

    2021-03-17 14:11:00
    【GUI程序最好还是在各个平台编译,跨平台编译一大堆问题(我这边是报错了),源码跨平台也很不错了(而且如果是Windows,最好是在...toolchain和target分别是,toolchain是交叉编译所需的“编译工具”,而target则是.
  • 直到这次,实在是忍不住想试试 Rust 嵌入式开发,弄几个传感器搞搞物联网方面的学习,于是狠心从某宝购买了一块4B 的板子。下单后,就一直等待卖家发货,不停刷新着物流信息,经过两天,板子终于到我手中了。不管三...
  • rust 交叉编译树莓派程序使用 rust 写树莓派程序时,如果直接在树莓派上进行编译,速度非常慢,如果是 zero 那更加是慢到受不了。因此最好是能通过开发机编译完后,直接放到树莓派上运行。由于开发机上的 cpu 架构、...
  • 而个人电脑可能是Windows,MacOS或者Linux,而线上电脑一般是Linux系统,与个人电脑可能不一致,静态编译类型语言(C/C++,Rust等)直接编译存在兼容问题,这时候就需要在个人电脑上通过交叉编译的方式编译产线服务器...
  • I'm using Windows 10. I would like to cross-compile a Rust program to run on armv7-unknown-linux-gnueabihf. (armv7-unknown-linux-muscl would also be acceptable but it doesn't seem to be available.)Her...
  • 返回版块reison1218发表于 2020-04-10 17:00Tags:交叉编译最近项目写得差不多了,之前用交叉编译工具cross,还挺好用的,但最近发现一个问题,cross无法识别本地lib,path是错的,导致报错:找不到/tools/cargo....
  • 免费版目前有三大主流工具商提供,第一是GNU(提供源码,自行编译制作),第二是****Codesourcery,第三是...arm-none-linux-gnueabi-gcc:是 Codesourcery 公司(目前已经被Mentor收购)基于GCC推出的的ARM交叉编译...
  • 文章目录Step 1: 安装mingw交叉编译环境Step 2: 安装rust编译Win x86目标Step 3: 编译源码参考 Step 1: 安装mingw交叉编译环境 sudo apt -y install mingw-w64 mingw-w64-tools mingw-w64-i686-dev mingw-w64-x86-64...
  • 几年前,主要是由于性能原因,我们开始用 Rust 替换 Python 重写了一些特定的后端服务,并取得了巨大的成功。现在,为了便于开发和测试,我们正在探索将 C/C++ 代码库的某些部分也迁移到 Rust 的方法。为了做到这...
  • 通过命令查看支持哪些OS和CPU架构rustc --print target-list | pr -tw100 --columns 3通过ldd命令可以查看编译出来的程序是否依赖动态链接库:1.先普通编译,比如cargo build --release(没有--release则是编译在...
  • 本文以在linux上编译windows上可执行rust tui example程序为例,记录rust跨平台编译过程。 tui-rs是一个Rust库,用于构建丰富的终端用户界面和仪表盘。 首先,git clone tui-rs的源码,编译并运行linux可执行程序...
  • [target.arm-unknown-linux-gnueabihf] linker = "arm-linux-gnueabihf-gcc" 来告诉 cargo 在编译到 arm-unknown-linux-gnueabihf target 的时候用之前安装的 gcc 做 linker, 不然会默认用 cc 做 linker, 那这当然...
  • rust linux通用可执行文件与win环境exe文件生成
  • 在 Flutter 插件上运行原生 Rust!该项目是一个 flutter 的插件模板,它对所有可用的 iOS 和 Android 架构提供了交叉编译原生 Rust 代码的开箱即用支持,...
  • rust 在x64平台上交叉编译aarch64的成果物
  • 关于 MacOS 交叉编译 Ubuntu 工具链的问题通过 Homebrew 装过了 gcc,但是现在好像 ld 有点问题环境信息编译平台MacOS Catalina (10.15)brew install gcc 安装了最新的 gcc-9目标平台Ubuntu 16.04主要出错信息ld: ...
  • 交叉:Rust板条箱的“零设置”交叉编译和“交叉测试”
  • <p>I've installed Go 1.2 on a Windows machine, wrote up a dummy program and set the environment variables <code>GOARCH</code> and <code>GOOS</code> to "AMD64" and "linux" respectively. <p>When i ...
  • Rust 编译静态单体执行文件

    千次阅读 2020-10-29 20:57:28
    Linux 下 rust 默认使用 gcc 作为链接器,编译后的文件在运行时需要glibc 运行库和其他的一些库。 这就导致在某个Linux版本下编译的执行文件,无法在另一个Linux版本上顺利运行。而且,如果你的程序还使用了Ope

空空如也

空空如也

1 2 3 4 5 ... 18
收藏数 358
精华内容 143
关键字:

rust windows 交叉编译