惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tenable Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
V
Vulnerabilities – Threatpost
G
GRAHAM CLULEY
Simon Willison's Weblog
Simon Willison's Weblog
C
CXSECURITY Database RSS Feed - CXSecurity.com
P
Privacy International News Feed
H
Heimdal Security Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
S
Secure Thoughts
MyScale Blog
MyScale Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
V
Visual Studio Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
L
LINUX DO - 最新话题
D
Darknet – Hacking Tools, Hacker News & Cyber Security
The Cloudflare Blog
美团技术团队
Recorded Future
Recorded Future
T
Tailwind CSS Blog
Latest news
Latest news
Security Archives - TechRepublic
Security Archives - TechRepublic
Security Latest
Security Latest
Know Your Adversary
Know Your Adversary
Cloudbric
Cloudbric
Schneier on Security
Schneier on Security
I
Intezer
L
LINUX DO - 热门话题
P
Palo Alto Networks Blog
云风的 BLOG
云风的 BLOG
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Vercel News
Vercel News
Attack and Defense Labs
Attack and Defense Labs
人人都是产品经理
人人都是产品经理
L
LangChain Blog
爱范儿
爱范儿
博客园 - 三生石上(FineUI控件)
博客园 - 叶小钗
L
Lohrmann on Cybersecurity
S
SegmentFault 最新的问题
W
WeLiveSecurity
C
Cybersecurity and Infrastructure Security Agency CISA
S
Securelist
SecWiki News
SecWiki News
V2EX - 技术
V2EX - 技术
IT之家
IT之家
Cyberwarzone
Cyberwarzone
F
Full Disclosure
Spread Privacy
Spread Privacy
阮一峰的网络日志
阮一峰的网络日志

博客园 - 007少侠

使用Recaf编辑汇编代码直接修改java的编译代码class Centos Linux 更换源,原官方源已经不再提供服务 如何在Docker容器中的Linux系统(Ubuntu + Centos Linux)里面使用systemctl Centos Linux 7 搭建邮件服务器(postfix + dovecot) Ubuntu Linux 搭建邮件服务器(postfix + dovecot) 【WSL2】在Windows通过自定义域名访问wsl2中的服务 Python pip pip3 源设置成国内源,阿里云源,清华大学源 利用云服务器实现内网穿透(frp),开启个人电脑(windows)可远程桌面访问 使用docker安装centos7并挂载主机目录 Linux下安装dart sdk并配置环境变量 Linux下安装JDK-openj9并配置环境变量 centos7 安装 bbr加速 linux环境常用命令和java/jvm常用命令 mybatis plus + druid多数据源(使用dynamic实现) docker将容器打包成镜像并传输至其他服务器部署(可用于容器重新run) .gitignore == git添加忽略不生效解决方案 jenkins自动构建项目源码git pull时出现冲突的终极解决方案(git远程覆盖本地分支) mysql查询,根据时间查询:几天前、几天内的数据 spring boot 使用aop实现拦截器
Rust交叉编译Mac编译Linux/Windows平台
007少侠 · 2021-08-27 · via 博客园 - 007少侠

关于交叉编译

一般编程阶段用的是Windows或者Mac系统,部署平台是Linux,这种情况下就需要使用Cross-Compiler交叉编译,意思是可以在当前平台Host下编译出目标平台target的可执行文件,

尤其是做ARM平台开发的同学对这个更为熟悉。

Rust交叉编译在Github上有一个文档Rust核心员工Jorge Aparicio提供的一份文档https://github.com/japaric/rust-cross,推荐大家仔细的读一读。

如果要求比较简单,都是X86_64架构,从Mac上编译出unknow-linux/pc-windows-gnu就好。

musl工具链(编译Linux环境程序所需)

musl实现了Linux libc,质量可靠,适配所有Linux环境,使用静态连接替换动态链接,这样就能打出一个完整的二进制文件,可以丢到任何Linux环境里运行。

当然,关于静态链接与动态链接各有优缺点,这里不细说。

安装一下

rustup target add x86_64-unknown-linux-musl

安装musl-cross

brew install filosottile/musl-cross/musl-cross

windows-gnu相关(编译Windows环境程序所需)

安装windows-gnu,

用msvc容易编译失败,msvc其实就是指编译出来的程序直接依赖Windows平台的基础库,而gnu的则是开源的基础库直接内嵌到咱们编译的程序里,所以msvc的程序要更小。

rustup target add x86_64-pc-windows-gnu

安装mingw-w64

Rust程序示例

main.rs

fn main() {
  println!("Hello, world!\r\nwww.qttc.net\r\n");
}

配置和打包编译

配置config

vi ~/.cargo/config(没有新建即可,另外可在项目根目录下创建.cargo/config文件,只对当前项目生效)

内容如下:

[target.x86_64-unknown-linux-musl]
linker = "x86_64-linux-musl-gcc"
[target.x86_64-pc-windows-gnu]
linker = "x86_64-w64-mingw32-gcc"
ar = "x86_64-w64-mingw32-gcc-ar"

编译(Linux环境程序)

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

可把编译命令写到脚本中:

编译命令整理为sh可执行文件脚本(package_linux.sh,放在项目根目录,给与执行权限chmod +x package_linux.sh)如下:

if [[ $(echo $0 | awk '/^\//') == $0 ]]; then
    ABSPATH=$(dirname $0)
else
    ABSPATH=$PWD/$(dirname $0)
fi
cd ${ABSPATH}
cargo build --release --target x86_64-unknown-linux-musl

编译出来后在target里会有个x86_64-unknown-linux-musl目录,里面又根据--release有debug和release目录,其中名为项目名的文件就是打包出来的Linux环境程序软件。

编译(Windows环境程序)

cargo build --release --target x86_64-pc-windows-gnu

也可把编译命令写到脚本中:

编译命令整理为sh可执行文件脚本(package_win.sh,放在项目根目录,给与执行权限chmod +x package_win.sh)如下:

if [[ $(echo $0 | awk '/^\//') == $0 ]]; then
    ABSPATH=$(dirname $0)
else
    ABSPATH=$PWD/$(dirname $0)
fi
cd ${ABSPATH}
cargo build --release --target x86_64-pc-windows-gnu

编译出来后在target里会有个x86_64-pc-windows-gnu目录,里面又根据--release有debug和release目录,其中xxx.exe为打包出来的Windows环境程序软件。

参考:
1. https://www.qttc.net/529-rust-cross-compile-mac-to-linux.html

2. https://www.cnblogs.com/silentdoer/p/13024037.html

3. https://blog.csdn.net/weixin_32827751/article/details/113998427