又一次自己编译Mono,这次是在Windows上,玩Bundle

Bundler 在 Windows 下的安装、配置和使用 1.      Bundler简介         Bundler是一个采用C和C++开发的称为sfm(struct-from-motion)的系统,它能够利用无序的图片集合(例如来自网络的图片)重建出3D的模型。最早的版本被用在Photo Tourism的项目上。项目的官方网站在此:http://phototour.cs.washington.edu/。         Bundler的输入 阅读详情

[成功]又一次自己编译Mono,这次是在Windows上,玩Bundle

作者:V君 发布于:2017-10-30 21:07 Monday 分类:折腾手记

目标 -- 将 .net 应用程序用只用一个 exe 承载, 并极大缩减体积, 且能保证工作正常.


(这次不是针对性的解决问题, 不TL;DR (´∀((☆ミつ 


■前言

 

虽然早早就知道 Mono 可以自行编译独立运行, 就像 unity3d 之类的玩法, 

也了解过 bundle 工具可以打包程序集进 exe 内, 还知道 Mono 有个 linker 

可以像静态库一样链接 IL 捡出只需要的部分, 缩减程序集体积

(尽管不会推断动态调用--挂掉 -_- ,彻底检查然后设定排除规则即可)

 

不过却没有尝试把他们串起来用: 先把 IL link 一下, 首次缩减体积

然后 bundle 把依赖的程序集打包到exe里 -- 出来的东西是原生的哟!

意味着可以加压缩壳, upx -9 要不要太爽, 进一步缩小最终 exe 的体积,

-- 真·一个 EXE 带走你全家...  (´∀((☆ミつ

 

■动手尝试


先从安装版开始 mkbundle -- 各种失败...过程略过吧, 不愿再想起.

要不要再试试自己编译? 


■自己编译


还是回到 Mono 官方 GitHub 上看看, 发现这回 windows 的 build 变成 pass 了!

再次按照官网教程, 抓回源代码, configure && make,然后没有预期的那么顺利 -- 报错了

error while loading shared libraries: ?: cannot open shared object file: No such file or directory

找不到 DLL ? 你显示个问号啥意思?

咕狗一阵,爆栈上面说用 ldd 和 cygcheck 做依赖检查, 然并暖, 没查出问题

但是跑起来就挂掉, 估计是真·动态加载扑空, 继续咕狗也没有结果...

机智的我拿出诊断大杀器 procmon 可以抓到访问失败的操作, 于是盯着看了.

果不其然, 发现文件名 libgcc_s_seh-1.dll 在环境变量 PATH 里的目录溜了一圈都没找到

先是线程退出, 然后进程退出了. everything 发现这货藏在这里:

cygwin64\usr\x86_64-w64-mingw32\sys-root\mingw\bin

把它加到环境变量就能顺利通过编译~


接下来是在 VS 编译运行时,对应官网教程的x64操作

VS需要安装C++功能以及CLANG2,否则无法编译或执行 mkbundle 出现 ClangC2Version 丢失.

这次总算顺利通过编译.

 

■开始玩吧!


让我们来找到 mkbundle, 它在源码目录下的 /mcs/class/lib/net_4_x-win32/


启动之前需要设置环境变量,

LINK指定静态库路径

export LINK="/LIBPATH:Mono源码目录/msvc/build/sgen/x64/lib/Release"

然后进入源码目录, 打死我也不信它原来没提供参数设置 include 路径

那就粗暴的用当前路径碾过吧, 进入最终执行~


mkbundle 

  --deps z:/LoopPlay.exe -o z:/lp.exe

  --static -L Mono源码目录/mcs/class/lib/net_4_x-win32 


刷一会儿屏之后, exe 就出来辣! 尽管很大块头, 我的有 21MB 但是可以 link 再 upx 嘛.


作成脚本来初始化环境变量就可以了, 本例的文件夹是 mono-src-git, 那么可以写成:

set PATH=%~dp0mono-src-git\mcs\class\lib\net_4_x-win32;%PATH%

set LINK=/LIBPATH:%~dp0mono-src-git/msvc/build/sgen/x64/lib/Release

set I18N=%~dp0mono-src-git\mcs\class\lib\net_4_x-win32

cd /d %~dp0mono-src-git

@cmd

双击之后就可以在弹出的命令行打以下简短的命令来执行:

mkbundle -v --static -L %I18N% --deps z:\cil.exe -o z:\bun.exe

 

时间关系就先写到这里, 抽空再更新link和压缩壳.  (´∀((☆ミつ

更新: x86 以及 IL link 和 upx. 

按照官网教程把配置参数改成 x86 之后发现问题少了很多. 比如头文件,比如运行时错误.

IL link 可以工具在 %I18N% 目录找到, 用法有点繁琐.

并且不加排除参数直接link的话, 八成会让程序挂掉或者运行不正常. 用法是:

monolinker.exe -c link -d Z:\ -out z:\linked -a Z:\cli.exe

每个参数都是绝对路径 ←好烦 看来真不是直接用的玩意儿, 得做个界面来调用吧.

-c 的参数还可以是 copy, 出来的文件大一些, 起码能正常跑.

将 link 过的程序集打包成一个 exe 然后直接喂给 upx 

加上 -9 最高压缩, 后面跟上exe的绝对路径. 一般能压缩到 30% 左右.

嗯嗯 讲完了. (´∀((☆ミつ

Mono初探--创建你的第一个Mono应用程序 (二) 在你使用Mono开发任何东西之前,你必须首先在你准备的平台上将Mono构建并运行起来.既然我这篇文章是讲Cross Platform .NET的,而且Mono的主要用处之一也是开发跨平台的应用程序,所以我将首先向你讲解Mono在Windows和Linux上的安装.我们先来看在Windows上的安装吧,不过老实说吧,这太简单了.我前面已经提到过就是现在Mono最新的稳定版本是1.05,我也将要用这个 阅读详情

相关推荐

Unity编译策略实战:Mono与IL2CPP原理、选择与优化指南

在Unity游戏开发中,脚本编译后端的选择直接影响应用的性能、包体大小和平台兼容性。Mono作为传统的即时编译方案,通过虚拟机解释执行中间语言,提供了快速的开发迭代和灵活的调试体验,尤其适合开发前期。而IL2CPP则采用静态编译策略,将C#代码转换为C++并编译为本地机器码,显著提升了运行时性能,增强了代码安全性,并更好地满足了iOS等平台的安全规范。从技术价值看,理解两者的核心差异有助于开发者在项目初期做出合理的架构决策,避免后期因性能瓶颈或平台限制导致的重构。在实际应用场景中,独立开发者和技术团队需要根

weixin_33910759的博客 471

Windows下的Bundler的安装与配置(包含错误解决方法)

本篇讲述了bundler搭配Cygwin的安装方法。 我主要是参考两篇教程: 1.教程一:如何搭建Bundler—— 在CYGWIN平台上使用Bundler 2.教程二:如何解决搭建Bundler中出现的问题——Bundler 及 PMVS 常见问题&解决方法 我在教程一的基础上来讲解Bundler的安装,对遇到的问题进行二次阐述。...

weixin_43727449的博客 2968

XLua跨平台编译实战:从Windows到iOS的完整避坑指南

跨平台编译是现代游戏开发中的关键技术,它允许开发者在不同操作系统和设备上构建和运行同一套代码。其核心原理在于通过统一的中间层或适配器,将平台相关的底层调用进行抽象和转换,确保代码逻辑在不同环境中的一致性。这项技术的价值在于显著提升开发效率,降低多平台适配成本,并支持热更新等高级功能。在Unity游戏开发领域,跨平台编译常用于移动端(如iOS、Android)的发布流程,其中涉及环境配置、工具链对齐、代码生成等关键环节。本文聚焦于XLua这一热更新解决方案在iOS平台上的编译实践,深入解析了环境对齐、IL2C

weixin_30546189的博客 331

Windows XP环境下Bundler的安装和配置

(参考自:http://www.cnblogs.com/weizhoupan/archive/2011/03/05/Intro_on_Bundler.html http://blog.youkuaiyun.com/manji_lee/article/details/7596877 http://blog.youkuaiyun.com/lxiaoxiaot/article/details/6721247)

a573233077的专栏 851

Unity项目解包全流程:从资源提取到代码反编译实战指南

在软件逆向工程和资源分析领域,解包技术是理解应用内部结构和数据组织的核心方法。其基本原理是通过解析应用程序的打包格式和运行时数据结构,将编译后的二进制文件还原为可读的资源与代码逻辑。这项技术的核心价值在于支持安全研究、学习借鉴、数据恢复和本地化开发等正当场景。具体到Unity引擎开发的应用,解包过程主要涉及两大模块:资源文件和托管代码。资源解包通常需要处理Unity特定的序列化格式,而代码解包则根据项目采用的脚本后端(如Mono或IL2CPP)选择不同的反编译与逆向工程工具链。例如,针对资源提取,Asset

weixin_34199335的博客 372

Unity引擎从Mono迁移到.NET Core:性能、工具链与开发体验的全面革新

在软件开发领域,运行时环境是应用程序执行的基石,它负责内存管理、即时编译和代码执行等核心任务。其原理在于通过虚拟机或公共语言运行时(CLR)将中间语言转换为机器码,并提供垃圾回收等基础服务。现代运行时技术的价值在于提升执行效率、优化资源利用,并实现跨平台兼容。在游戏开发场景中,高性能的运行时对于保障帧率稳定、减少卡顿至关重要。Unity引擎正经历从Mono运行时向基于.NET Core的CoreCLR运行时的重大迁移,这直接回应了开发者对更高效内存管理和更强大语言特性的核心诉求。此次迁移将带来显著的性能提升

weixin_33937913的博客 392

在Windows上编译mono

There are two ways of building Mono on Windows, both do require a Cygwin setup which provides some tools required by Mono at build time. First, download Cygwin from www.cygwin.com. Use the 32 bit in

x_studying的专栏 3523

Unity资源逆向提取神器AssetRipper:从编译文件到可编辑资产的完整指南

在游戏开发与逆向工程领域,资源提取与格式转换是核心技术环节。其原理基于对运行时序列化数据的逆向解析,通过解析Unity构建后的二进制格式(如AssetBundle、APK包),重建出编辑器可识别的资产结构。这项技术的核心价值在于实现资源的可编辑化恢复,为学习研究、项目抢救与安全审计提供可能。应用场景广泛覆盖逆向工程、资源迁移与Mod制作等实践需求。本文聚焦的AssetRipper工具,正是通过逆向Unity序列化系统,高效处理纹理、网格、预制体等资产类型,并应对Shader丢失、代码混淆等常见挑战,成为开发

aofan9566的博客 482

Unity跨平台开发核心:.Net运行时、IL2CPP与Mono后端深度解析

在软件开发领域,跨平台技术是实现代码一次编写、多端运行的关键。其核心原理在于通过中间层抽象,将高级语言代码转换为平台无关的中间表示,再由各平台的运行时环境执行。.Net框架正是这一理念的杰出代表,其公共语言运行时(CLR)和中间语言(IL)机制构成了跨平台的技术基石。对于游戏开发而言,Unity引擎深度集成了.Net生态系统,通过Mono和IL2CPP两种脚本运行时后端,将C#代码高效部署到iOS、Android、PC等多元平台。理解.Net运行时与Unity的协作机制,不仅能优化游戏性能、解决平台兼容性问

cnracht8153的博客 287

最新版bundler,windows下可运行

最新版的bundler,可以在windows下面通过cygwin运行,也可以用vs2013运行、调试。

【C++】lambda表达式

本篇文章我们要学习的是lambda表达式,它是C++11新增的一种特别方便的语法,相较于之前的函数指针以及仿函数都方便了不少,下面就让我们一起来学习吧。

malloc不出对象的博客 2630

AssetRipper深度解析:如何从Unity游戏中提取专业级资源?

你是否曾经遇到过这样的情况:手头有一个Unity游戏,想要研究它的资源结构,或者需要提取其中的模型、纹理、音频等资产用于学习或二次创作?AssetRipper正是为解决这类需求而生的专业工具。作为一款功能强大的开源GUI应用程序,它能够深入分析Unity游戏文件,提取各种资产、资产包和序列化文件,为游戏开发者、逆向工程师和资源研究者提供了高效便捷的解决方案。 ## 🔍 为什么你需要AssetR

gitblog_01115的博客 916

人形机器人五大核心零部件技术解析与国产化实况

人形机器人并非简单机械集成,而是物理、能量、感知、决策与执行五层系统毫秒级协同的复杂体。其性能瓶颈往往不在于整机算法,而深植于谐波减速器的刚度稳定性、无框力矩电机的功率密度与温升控制、六维力传感器的动态响应与温漂抑制、运动控制器的实时OS生态及灵巧手的多指协同精度等底层硬件能力。这些部件共同构成整机68.3%的成本,且国产化率差异显著——谐波减速器达72%,而高精度力矩传感器仍受制于日德厂商。本文聚焦‘谐波减速器’和‘六维力传感器’两大热词,从材料工艺、参数定义、失效模式到产线验证,揭示真正卡脖子的技术关卡

weixin_29065959的博客 406

OpenClaw 品牌身份落地指南:语义色彩令牌、字体回退与设计审计在 ClawHub 中的实践

本文以 ClawHub(OpenClaw 的 Skill + Plugin Registry)仓库中维护的品牌身份规范文档为核心,完整讲解 OpenClaw 视觉身份的色彩体系、字体规则、文案语气与标识/图像约束,并结合仓库内的样式实现与设计审计脚本,说明这些身份规则如何被落地为可验证的工程机制。读完后,你将掌握在消费方项目中正确引用 `--oc-*` 语义令牌、构建字体回退栈,以及如何用仓库自带

gitblog_00287的博客 368

STM32多模式智能小车状态机设计与中断优先级实践

在嵌入式实时系统中,状态机是实现多任务协同与功能切换的核心范式。其本质是通过有限状态集合、明确转移条件和确定性动作,构建可预测、易维护的控制逻辑。基于STM32等资源受限MCU时,需兼顾状态调度效率、中断并发安全与硬件资源约束。关键技术价值体现在:提升系统模块解耦度、支持物理按键与蓝牙双源触发、保障实时响应不丢帧。典型应用场景包括智能小车多模运行(循迹、避障、遥控、定距跟随等)、工业设备工作模式切换及IoT终端低功耗状态管理。本文以STM32F103C8T6平台为例,深入解析全局模式变量设计、双通道状态切换

weixin_42509888的博客 93

与OpenClaw同类性质的AI智能体框架/工具汇总(小白友好)

OpenClaw的核心定位是「开源、本地优先、可执行真实任务的AI代理」,核心价值是让AI从“聊天”落地到“动手干活”(操控电脑/服务器、处理办公/系统任务)。结合这一核心,以下是同类性质的工具/框架,按「小白易上手程度」排序,每个产品重点说明和OpenClaw的异同、核心优势及适配场景,方便小白快速区分选择。

hy行者勇哥的博客 2105

Mono制作安装包让C#桌面应用程序脱离net framework步骤

1、  下载安装Cygwin http://www.cygwin.com/ 安装时,请将mingw-gcc、mingw-zlib、pkg-config、libiconv这几个组件选上,这是将.NET程序转化为本地程序的必要的编译环境。 Cygwin环境中标题栏右键设置字符集解决中文乱码 2、 启动cgywin并设置环境变量: 1、点击开始菜单或桌面上的cygwin图标,启动且进入

依宸2016 2489

动手在 SAP BTP Cloud Foundry 开发和部署 SAP UI5 应用的前置条件 - 订阅 SAP Build Work Zone Standard Version

摘要:本文介绍了SAP BTP Cloud Foundry环境中HTML5应用的概念,区分了web应用、HTML5应用和SAP UI5应用的关系。重点说明了在Cloud Foundry环境部署HTML5应用的方法是通过订阅SAP Build Work Zone standard edition服务,并详细描述了订阅过程中可能遇到的"OIDC trust missing"错误。该错误是由于业务用户认证需要配置SAP Cloud Identity Services的OpenID Connec

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 310

AssetRipper:Unity游戏资源逆向分析与提取的专业工具指南

AssetRipper是一款专为Unity游戏开发者、逆向工程师和资源分析师设计的专业工具,能够从Unity序列化文件、资产包和压缩文件中提取游戏资源,并将其转换为原生Unity引擎格式。本指南将深入探讨AssetRipper的核心功能、实际应用场景以及高效工作流程。 ## 工具定位与核心价值 AssetRipper主要服务于以下技术场景: **游戏开发调试**:帮助开发者分析构建后的游戏文

gitblog_00069的博客 471

流体动力学仿真软件:Star-CCM+_(1).Star-CCM+基础及入门

Star-CCM+的用户界面(UI)分为多个部分,包括菜单栏、工具栏、工作区、视图窗口和控制台。菜单栏包含文件、编辑、视图、工具等常用菜单。例如,“File”菜单可以用于打开、保存和退出项目。工具栏提供常用的工具按钮,如新建项目、打开项目、保存项目等。也可以自定义工具栏,添加常用的功能按钮。工作区显示当前项目的结构和各个对象。可以通过拖拽方式组织和管理项目中的各个部分。视图窗口显示几何模型、网格、结果等。可以通过不同的视图模式查看和分析数据。控制台显示软件的运行日志和输出信息。

kkchenjj的博客 1195

Microsemi Libero系列教程(六)——Identify片上逻辑分析仪的使用

文章目录FPGA如何进行在线调试关于Microsemi片上逻辑分析仪FPGA片上逻辑分析仪原理预期效果0.准备一个创建好的Libero工程1.新建identify工程,并添加想要监测的信号2.管脚分配,编译下载3.设置触发类型4.IICE逻辑分析仪核资源占用 系列教程:Microsemi Libero系列教程 FPGA如何进行在线调试 对于嵌入式系统来说,如单片机,进行硬件级程序调试时,通常采用的是JLink/ST-Link调试器,在线调试的方式来获取程序实时运行的状态,可以观察程序运行流程、各种变量的值

whik1194的博客 1万+

Folia 快速安装指南:三平台跑起歌词动画播放器

Folia 是一款桌面歌词动画播放器,把歌词渲染成全屏动画,支持网易云音乐、酷狗、QQ 音乐、Navidrome 与本地音乐库。这篇文章走一遍 Windows、macOS 与 Linux 的安装流程,按取包来源把操作分成四条路线。跟着路线走完,你会在桌面或应用菜单里拿到一个可点击的 Folia 入口,点开即见首页。取包、安装、验证、排障全流程大约 10 分钟。 装好后的 Folia 主界面长这样

gitblog_00469的博客 428

三菱MC协议(MC/TCP):避坑指南|C#实现三菱MC协议:软元件(X/Y/M/D)读写与帧格式解析

核心避坑逻辑:MC协议的坑80%集中在“PLC配置”“地址编码”“字节序”,先解决这三点,通信就成功了一半;实战优先级:新手优先用开源库(Mitsubishi.MCProtocol),避免手动拼接帧格式的复杂坑;进阶再研究帧格式解析;排坑技巧:先Ping通→用调试助手验证→写C#代码,分层排查,不要混在一起找问题。掌握这些避坑技巧后,你可以轻松实现C#与三菱全系列PLC的稳定通信,满足工业场景中数据采集、设备控制等核心需求。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 2189

AssetRipper终极指南:5步掌握Unity资源提取的完整教程

你是否曾面对Unity游戏的神秘资源文件束手无策?那些*.assets、*.bundle文件就像加密的宝箱,里面藏着精美的3D模型、生动的纹理贴图、动听的音频资源,却无法直接打开使用。这正是**AssetRipper**要解决的痛点——作为专业的Unity资源提取工具,它能将Unity序列化文件和资源包中的宝贵资产完整提取出来,让你轻松获取游戏开发中的核心资源。 ## 🔍 为什么你需要Asse

gitblog_01003的博客 903

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Unity逆向工程实战:使用AssetStudio与dnSpy解析游戏资源与代码

在软件开发和游戏安全领域,逆向工程是一项关键技术,它通过分析已编译程序来理解其内部结构与逻辑。其核心原理是解析程序的二进制数据,还原出可读的资源与代码信息,从而帮助开发者学习优秀实现、排查安全风险或进行技术研究。这项技术的价值在于能够深入理解软件运行机制,提升开发技能与安全防护能力。在游戏开发、安全审计、漏洞分析等场景中,逆向工程尤为重要。本文聚焦于Unity引擎应用的逆向,详细介绍了如何使用AssetStudio进行资源解析,以及如何利用dnSpy进行代码反编译,通过实战演示了从资源提取到逻辑分析的全过程

weixin_30500473的博客 323

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

MoviePy 音频效果统一适配器:深入解析 audio_video_effect 装饰器

`moviepy.decorators.audio_video_effect` 是 MoviePy 中连接"音频效果"与"视频剪辑"的关键桥梁装饰器,它让同一套音频处理函数(`audioclip -> audioclip`)无需编写两套实现,即可同时作用于纯音频剪辑和携带音轨的视频剪辑——作用于视频时自动只改音频、保留画面原样。本文以 [moviepy/decorators.py](https:/

gitblog_00841的博客 348

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

上一篇: Unity 使用自定义资源(.asset)配置数据
下一篇: 自动实现的属性-Auto-Implemented Properties
linuxheik
博客等级 码龄15年 865粉丝 135原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值