rust之linux for windows 交叉编译gtk-rs_cargo build --release x86_64-pc-windows-gun-csdn博客


本站和网页 https://blog.csdn.net/love906897406/article/details/125776951 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

Rust之linux for windows 交叉编译gtk-rs_cargo build --release x86_64-pc-windows-gun-CSDN博客
Rust之linux for windows 交叉编译gtk-rs
爱学习的佳
已于 2022-08-08 01:25:06 修改
阅读量1.3k
收藏
点赞数
分类专栏:
Rust
Gtk-rs
文章标签:
rust
linux
开发语言
于 2022-07-14 09:21:34 首次发布
版权声明:本文为博主原创文章,遵循
CC 4.0 BY-SA
版权协议,转载请附上原文出处链接和本声明。
本文链接:
https://blog.csdn.net/love906897406/article/details/125776951
版权
同时被 2 个专栏收录
14 篇文章
5 订阅
订阅专栏
1 篇文章
0 订阅
软件包安装适用于 arch,但对于其他发行版应该类似。
首先使用 rustup 正常安装 rust。下一步将安装 windows 工具链。
rustup target add x86_64-pc-windows-gnu
vim ~/.cargo/config 插入以下内容,没有这个文件新增即可
[target.x86_64-pc-windows-gnu]
linker = "x86_64-w64-mingw32-gcc"
ar = "x86_64-w64-mingw32-gcc-ar"
现在安装 mingw 和 gtk 库,需要一段时间
Arch Linux
mingw 包位于 AUR 中,
我们
可以手动安装或使用帮助程序。这些包需要一些时间来编译。
pacaur -S mingw-w64-gcc mingw-w64-freetype2-bootstrap mingw-w64-cairo-bootstrap
pacaur -S mingw-w64-harfbuzz
pacaur -S mingw-w64-pango
pacaur -S mingw-w64-poppler
pacaur -S mingw-w64-gtk3
Fedora
Fedora 通过其存储库提供预编译的 Mingw 和 GTK 包。64 位和 32 位都可用 ( 
mingw64-*
vs 
mingw32-*
),可能需要 64 位包。
dnf install mingw64-gcc mingw64-pango mingw64-poppler mingw-w64-gtk3
其他发行版
GTK 不再提供 Windows 二进制文件供下载,因此对于不打包的 Mingw-GTK 包的发行版,交叉编译要困难得多。一般来说,步骤是:
下载 64 位 Mingw GTK 库。
将其解压缩到一个文件夹中。例如,将其安装在
/opt/gtkwin
:中
mkdir -p /opt/gtkwin && unzip <file.zip> -d /opt/gtkwin
必须设置库以匹配安装文件夹:
cd /opt/gtkwin
find -name '*.pc' | while read pc; do sed -e "s@^prefix=.*@prefix=$PWD@" -i "$pc"; done
找到一些下载库的地方是一项挑战,并且没有理想的解决方案。三个选项是: (1) 从 Fedora RPM 中获取最多的版本,可以在
这里
下载;(2) 使用
提供的古老 GTK 3.6 ;(3) 深入研究 GTK 对 Windows 的
建议
。但是,请务必先检查自己发行版的存储库。
编译
现在使用 gtk-rs创建项目。如果不想在运行时弹出终端窗口,请将以下内容添加到
main.rs
#![windows_subsystem = "windows"]
项目能在 Linux 上正常跑起来,我们就可以按照这些步骤为 Windows 编译。
PKG_CONFIG_PATH
应该指向你的 Mingw 的 pkgconfig 目录,而
MINGW_PREFIX
应该指向 Mingw 的根目录。例子:
export PKG_CONFIG_ALLOW_CROSS=1
export MINGW_PREFIX=/usr/x86_64-w64-mingw32
export PKG_CONFIG_PATH=$MINGW_PREFIX/lib/pkgconfig
cargo build --target=x86_64-pc-windows-gnu --release
对于 Fedora Mingw 的前缀是
/usr/x86_64-w64-mingw32/sys-root/mingw/
. 对于其他发行版,位于
或安装预编译二进制文件的任何位置。
如果在编译时遇到一些问题,可能需要考虑重新启动。另外,在使用 Glade 和 gtk-rs 时应该小心。确保 Glade 请求的版本最多等于我们系统上安装的版本。否则将无法执行。
打包
我们将在
这里重用路径来复制相关文件以将其打包:
mkdir wherever
mkdir wherever/release
cp target/x86_64-pc-windows-gnu/release/*.exe wherever/release
cp $MINGW_PREFIX/bin/*.dll wherever/release
mkdir -p wherever/release/share/glib-2.0/schemas
cp $MINGW_PREFIX/share/glib-2.0/schemas/gschemas.compiled wherever/release/share/glib-2.0/schemas/gschemas.compiled
cp -r $MINGW_PREFIX/share/icons wherever/release/share/icons
之后,可以压缩
wherever/release
文件夹的内容并分发它。
可选的附加功能
图标和版本信息
这些步骤用于将图标添加到
的程序中。首先制作一个 rc 文件,显示图标的位置和版本信息。将“path/to/my.ico”更改为
的图标”。请参阅
VERSIONINFO resource - Win32 apps | Microsoft Docs
src/program.rc:
id ICON "path/to/my.ico"
1 VERSIONINFO
FILEVERSION
1,0,0,0
PRODUCTVERSION
BEGIN
BLOCK "StringFileInfo"
BLOCK "040904E4"
VALUE "CompanyName", "My Company Name"
VALUE "FileDescription", "My excellent application"
VALUE "FileVersion", "1.0"
VALUE "InternalName", "my_app"
VALUE "LegalCopyright", "My Name"
VALUE "OriginalFilename", "my_app.exe"
VALUE "ProductName", "My App"
VALUE "ProductVersion", "1.0"
END
BLOCK "VarFileInfo"
VALUE "Translation", 0x409, 1252
现在要制作一个构建脚本,首先将以下内容添加到Cargo.toml:
[package]
build = "build.rs"
然后在 build.rs添加以下代码
use std::process::Command;
use std::env;
use std::path::Path;
fn main() {
let out_dir = env::var("OUT_DIR").unwrap();
Command::new("x86_64-w64-mingw32-windres")
.args(&["src/program.rc"])
.arg(&format!("{}/program.o", out_dir))
.status().unwrap();
Command::new("x86_64-w64-mingw32-gcc-ar")
.args(&["crus", "libprogram.a", "program.o"])
.current_dir(&Path::new(&out_dir))
//在为 linux 构建时,需要注释掉这两个打印。
println!("cargo:rustc-link-search=native={}", out_dir);
println!("cargo:rustc-link-lib=static=program");
Windows 10 主题
如果希望程序具有更好看的外观,可以将主题设置为 Windows 10。
mkdir /wherever/release/share/themes
mkdir /wherever/release/share/gtk-3.0
编辑/wherever/release/share/gtk-3.0/settings.ini
[Settings]
gtk-theme-name = Windows10
gtk-font-name = Segoe UI 10
gtk-xft-rgba = rgb
然后从
https://b00merang.weebly.com/windows-10.html
下载 Windows 10 。
unzip Windows-10-master.zip
mv Windows-10-master /wherever/release/share/themes/Windows10
关注博主即可阅读全文
优惠劵
关注
点赞
觉得还不错?
一键收藏
打赏
知道了
评论
软件包安装适用于arch,但对于其他发行版应该类似。首先使用rustup正常安装rust。下一步将安装windows工具链。vim~/.cargo/config插入以下内容,没有这个文件新增即可现在安装mingw和gtk库,需要一段时间ArchLinuxmingw包位于AUR中,您可以手动安装或使用帮助程序。这些说明使用pacaur助手。这些包需要一些时间来编译。...............
复制链接
扫一扫
专栏目录
windows
-service-
rs
中的
Windows
服务
05-23
提供用于管理和实施
服务的工具的板条箱。
实施
本节介绍实现作为
服务运行的程序的步骤,有关该程序的完整源代码,请查看examples文件夹。
基本
每个
服务都必须实现服务入口函数fn(argc: u32, argv: *mut *mut u16)并从应用程序main向系统注册它。
这个板条箱提供了一个方便的[ define_
_service! ]宏可为服务输入函数生成一个低层的样板,该函数可分析来自系统的输入并将处理委托给用户定义的高层函数fn(arguments: Vec<OsString>) 。
本指南将底层输入函数称为ffi_service_main ,将高层函数称为my_service_main但这取决于
开发
人员如何调用它们。
#[macro_use]
extern crate win
ca
rgo
项目构建和包管理工具(配置
国内源)、
Ca
.toml配置项参数说明、
run运行项目
热门推荐
西京刀客
06-14
1万+
官网: https://doc.
-lang.org/
/index.html
,简单来说就是python 的pip,nodejs 的npm,
下的包管理工具。
用于组织
项目,比直接用
c编译多个源文件更方便。
1 条评论
您还未登录,请先
登录
后发表或查看评论
【GitHub项目推荐--一个简单的绘图应用程序(
GTK
4)】【转载】
最新发布
j8267643的博客
01-22
589
一个用
4 编写的简单的绘图应用程序来创建手写笔记。
Rnote 旨在成为一个简单但实用的笔记应用程序,用于手绘或注释图片或文档。它最终能够导入/导出各种媒体文件格式。而且输出的作品是基于矢量的,这使其在编辑和更改内容时非常灵活。
地址:https://github.com/flxzt/rnote
napi-
:用于在
中构建编译的NodeJS附加组件的最小库
02-04
幼虫
该项目是从初始化的
构建编译的NodeJS附加组件的最小库。
平台支援
操作系统
Linux
苹果系统
MSVC
FreeBSD
节点JS
节点10
节点12
节点14
节点15
该库取决于N-API,并且需要Node@10.0.0或更高版本。
我们已经有一些由napi-
编写的软件包:
一个不错的功能是,此板条箱允许您仅使用
/JavaScript工具链即可构建附加组件,而无需涉及node-gyp 。
味道
您可以从开始使用napi-
定义JavaScript函数
#[js_fun
winapi-
:与
API的
绑定
02-05
一个
板条箱,可以轻松地将Glade生成的UI文件导入到
代码中。-
05-27
代码中。
gladis一个
板条箱,可轻松将Glade生成的UI文件导入到
用法为了使用Gladis,您必须在项目的
.toml文件中添加以下依赖项:[dependencies] gladis =“ 0.2。*” gladis_proc_macro =“ 0.2。*”完成此操作后,您可以享受Gladis派生!
#[derive(Gladis,Clone)] pub struct Window {pub window:
gtk
:: Appli
tionWindow,pub label:
:: Label,} impl Window {pub fn new()-> Self {Self :: from_resource(“ / dev /
4-
:用于
4绑定和包装器(
04-12
一组箱子,旨在提供完整的 4装订。 该存储库包含
4的所有“核心”板条箱。
:一个中间层,将
与窗口系统的细节隔离开来。
:Wayland后端特定功能。
:X后端特定功能。
:中间层,可将
与OpenGL或Vulkan实现的细节隔离。
4板条箱还依赖于平台的其他库部分,例如:
这些在
3和GStreamer绑定中很常见,并且是存储库的一部分。
有关每个板条箱的更多信息,请参考其目录中的README.md文件。
最低支持的
版本
当前,支持的最低
版本是1.48.0 。
文献资料
发展处
GDK
葛兰素史克
GDK Wayland
GDK X11
巨集
贡献
绑定由两部分组成:
使用gir自动生成的
手动零件
可以使用generator.py脚本生成自动的
python3 gener
桌面应用 demo
小知识折射大智慧
07-23
2850
精通
》里介绍了
+框架的
,这篇博客记录并扩展一下。
可以用于桌面应用
,我还挺惊讶的,大学的时候也有学习过 VC++,对桌面编程一直都很感兴趣,而且一直有一种妄念,总觉得自己能
一款很好用的桌面程序,就和总觉得自己能彩票中大奖一样。
学习与实践 (二)
4.0 GUI
qq_38383364的博客
09-25
585
这里我使用的是blueprint这一个工具来进行UI界面的设计。
4安装配置
Lao_gan_ma的博客
06-28
1050
4 安装过程记录,防踩坑
上编译
平台的
程序
SteveForever的博客
05-21
1409
本文以在
上可执行
tui example程序为例,记录
跨平台编译过程。
tui-
是一个
库,用于构建丰富的终端用户界面和仪表盘。
首先,git clone tui-
的源码,编译并运行
可执行程序命令如下:
git clone https://github.com/fdehau/tui-
.git
run --example user_input --
release
使用如下命令,可以通过–target选项指定编译目标的平台
:为
+库提供
04-05
组织旨在在基于GObject的库上提供安全的
绑定。 您可以在上找到有关它的更多信息。
该存储库包含
组织的所有“核心”板条箱。 有关每个板条箱的更多信息,请参考其目录中的README.md文件。
您可以在查看所有已发布的包装箱的文档。
再生中
要使用重新生成板条箱,请按以下方式使用generator.py文件:
$ python3 generator.py
发展
该存储库主要分为两个分支: master和crate 。 master包含尚未发布的代码,并且是正在发生新发展的地方。 crate包含最新发布的源代码,不应进行更新。
该存储库的结构如下:
- crate/
|-- README.md
|-- Gir.toml
|--
.toml
|-- src/
|-- sys/
win10
install wasm-pack失败
japlus的博客
03-07
904
【代码】win10
install wasm-pack失败。去官网下载:wasm-pack 安装包运行即可
下c++调用
库的例子
令狐一冲
04-27
3411
环境准备
安装mingw,我的安装的mingw
64
,目录为: D:/tools/mingw
安装
,此步需要注意,不要选择默认安装,应该如下:
Current installation options:
default host triple:
x86
pc
-msvc
default toolchain: stable
...
GUI 库的状态
分享身边生活经验blog
10-19
4854
图形用户界面 (GUI) 为与计算机交互提供了直观的可视化前端。与使用文本进行输入和输出操作的命令行界面 (CLI) 不同,GUI 使用图标、窗口和菜单等视觉指示器来实现更好的用户交互和体验。随着时间的推移,
越来越受欢迎,这可能是由于它的灵活性和充满活力的开源社区。
人员已将
用于系统设计、Web
和构建 GUI 等事情。您可以使用许多包和 crate 在
快速、复杂的 GUI 应用程序。在本文中,我们将讨论流行的
GUI 库和框架,如
、flt
如何修改combobox的下拉箭头_从React的视角谈谈
weixin_39933336的博客
11-26
212
作者 | Savanni D'Gerinel
译者 | 王强
策划 | 李俊辰
最近我尝试了多种框架,想要制作出既易用又容易安装的应用程序,但是都以失败告终;最后我决定转向
,开始拥抱原生软件
。 虽说以前我也短暂尝试过
,但它对我来说还是很陌生的。在此之前,我在用户界面上的大部分经验都来自于 React 应用程序的构建。从 ...
服务器网易云,GitHub - fplust/netease-cloud-music-
平台下基于
的网易云音乐播放器...
weixin_39522927的博客
08-01
432
netease-cloud-music-
是基于
的网易云音乐播放器,专为
系统打造,已在 openSUSE Tumbleweed + GNOME 环境下测试。特点稳定:专为
系统打造,相比官方版本拥有更好的兼容与稳定性。极速:相比 Node/python 版,
带给你如丝般的...
Limo
第三步:打包并安装你的程序
iEnzo的专栏
12-14
1130
每次都要用telnet命令行运行是不是有点不爽,那就打包成ipk,在手机中安装使用吧:一、打包先来看看ipk的结构(参考euzen博文:http://hi.baidu.com/euzen/blog/item/0666b4dea38742d78c102942.html)包目录test下包含两个目录1.目录DEBIAN内含文件control,内容如下,括号内为备注:Source: test      (显示在桌面的名称)Section: Utility   Package: cn.iEnzo.test    
交叉编译
tyc880616的博客
02-18
4425
0、安装
环境参考:https://blog.csdn.net/u011067439/article/details/10281018
查看支持的目标平台
up target list
1、添加对应平台模块
up target add arm-unknown-
-gnueabi
2、在~/.
/config配置参数,配置目标平台交...
教我使用
06-03
使用
库需要先安装
+3,可以在
系统下通过包管理器安装,也可以在
和 macOS 下从官网下载安装程序进行安装。
+3 后,可以在
项目中添加
和 gdk 两个依赖:
```toml
[dependencies]
= "0.9"
gdk = "0.9"
```
然后在
代码中引入
和 gdk 库:
extern crate
extern crate gdk;
中,主要有两种方式创建 GUI 窗口:
Build
er 和手动创建。下面分别介绍这两种方式。
### 使用
er 创建 GUI 窗口
er 可以通过 XML 文件描述 GUI 界面,然后使用
代码加载并显示窗口。以下是一个简单的例子:
```xml
<?xml ve
ion="1.0" encoding="UTF-8"?>
<interface>
<object class="
Gtk
Window" id="main_window">
<property name="title">Hello, World!</property>
<property name="default-width">400</property>
<property name="default-height">300</property>
<child>
Label" id="label">
<property name="label">Hello, World!</property>
</object>
</child>
</interface>
代码中,可以使用
::
er 加载并显示窗口:
use
::prelude::*;
::{
er, Window};
if let Err(err) =
::init() {
eprintln!("Failed to initialize
: {}", err);
return;
let glade_src = include_str!("path/to/glade/file.glade");
let
build
er =
er::from_string(glade_src);
let window: Window =
er.get_object("main_window").unwrap();
window.show_all();
::main();
### 手动创建 GUI 窗口
手动创建 GUI 窗口需要在
代码中定义窗口和窗口中的组件,以下是一个简单的例子:
::{Window, WindowType, Label};
let window = Window::new(WindowType::Toplevel);
window.set_title("Hello, World!");
window.set_default_size(400, 300);
let label = Label::new(Some("Hello, World!"));
window.add(&label);
以上代码中,创建了一个顶层窗口和一个标签组件,将标签添加到窗口中并显示窗口。
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
CSDN认证博客专家
CSDN认证企业博客
码龄14年
暂无认证
33
原创
1598
周排名
2万+
总排名
20万+
访问
等级
982
积分
3万+
粉丝
465
获赞
85
907
私信
热门文章
错误 MSB8020 无法找到 v143 的生成工具(平台工具集 =“v143”)。若要使用 v143 生成工具进行生成,请安装 v143 生成工具。--解决方案【原创】
68469
Arch Linux图文安装教程(2022.08.01)
19164
Microsoft Visual C++Build Tools安装包丢失或损坏【解决方案】
11411
Rust编译报错:error: linker `cc` not found
7602
Qt开发之Rust篇(一)
6868
分类专栏
数据库
1篇
Go语言
14篇
Python
3篇
设计模式
Anaconda
2篇
Anaconda3
Nuitka
Nuitka打包exe
c++
qt
7篇
Visual Studio
wxWidgets
最新评论
ku_code_ku:
感谢感谢解决了 呜呜呜
Rust之Sea-orm快速入门指南
Joker6578:
现在有一点,估计后面等产品成熟就好了,还是preview阶段
ArchLinux开机自动激活NumLock
Stuffy9573:
不错(*≧∪≦)👍🏻
Jason_Piao:
locale-gen编辑完之后怎么退出
Rust自定义安装路径
Aues6uen11Z:
其实不需要把%RUSTUP_HOME%和%CARGO_HOME%加到Path里,这些命令都在bin里,安装程序会自动加到环境变量
最新文章
mysql8.0.36主从复制(读写分离)配置教程
【教程】Flutter与Rust完美交互,无需手写FFI代码
Rust之struct与bytes相互转换
2024年
2023年
5篇
2022年
53篇
目录
评论 
被折叠的 
 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
添加红包
祝福语
请填写红包祝福语或标题
红包数量
红包个数最小为10个
红包总金额
红包金额最低5元
余额支付
当前余额
3.43
前往充值 >
需支付:
10.00
取消
确定
下一步
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝
规则
hope_wisdom
发出的红包
打赏作者
你的鼓励将是我创作的最大动力
¥1
¥2
¥4
¥6
¥10
¥20
扫码支付:
获取中
扫码支付
您的余额不足,请更换扫码支付或
充值
实付
使用余额支付
点击重新获取
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。
余额充值