将程序打包成单一一个可执行文件

最近做了一个界面交互渲染的小项目,项目主要的功能是通过TCP接收数据然后在界面中渲染出对应的状态。由于用户的最大需求是炫酷,于是为了方便实现特殊的交互逻辑,我选择用freeglut自行实现了界面的交互和渲染,又用OpenCV做了部分图像的绘制以及几个弹出窗体的实现。

项目完工后打包出来发现,一个这么简单的程序除了exe可执行程序外,居然需要附带9个其他文件,总的大小也到达了57.6M。有点蛋疼,于是研究了一下怎么将其全部打包成一个exe文件。

没做任何操作的文件列表如下:

请添加图片描述

干掉dll文件

从文件列表可以看到,里面体积最大的是OpenCV的动态链接库文件。要干掉它非常简单,如果用的是OpenCV4或者老一点的OpenCV3,可以自行从官网下载源码然后编译静态链接库,这样就OK。不过这个操作有个非常蛋疼的点,是需要从源码开始编译。

更简单的方法则是用OpenCV2,因为它有官方编译好的静态链接库,具体的操作可以看我之前写的这篇教程。相应的缺点则是不能用到OpenCV3或者4的特定功能。由于本人只用OpenCV来做一些简单的绘图,于是选择了简单的方法。这样操作下来程序的总体积只剩下不到5M。

另外一个freeglut的动态链接库也同样可以通过编译其源码生成静态链接库的版本来回避掉,这里不再赘述。

干掉图像素材文件

本人用OpenCV加载图像素材做一些绘图渲染,一开始通过相对路径加载,于是出现了大量图片素材文件需要打包的问题。为了解决这个问题,可以通过导入图片素材到工程中的方法进行处理。

大概的流程是→添加图像资源(这样程序编译的时候就会将图像打包进exe)→在程序中通过ID索引到这个资源→读取该资源的内存块→使用OpenCV解码该内存块获得图像。具体的代码实现可以看本人写的这篇教程。

完成了上面两步操作,就得到了一个单一的exe可执行文件啦!

最终打包结果如下:

请添加图片描述

可以看到清爽了巨多。

当然,对于更复杂的程序,要将其相关文件全部封在一个exe中肯定会更加复杂,需要更多的操作,本人后面如果有做相应的研究会继续在这篇博客中更新。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/59817.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[openCV]基于拟合中线的智能车巡线方案V1

import cv2 as cv import os import numpy as np# 遍历文件夹函数 def getFileList(dir, Filelist, extNone):"""获取文件夹及其子文件夹中文件列表输入 dir:文件夹根目录输入 ext: 扩展名返回: 文件路径列表"""newDir d…

hcip的mgre和ospf实验

题目 拓扑图 一、配置环回和IP地址 R1 < Huawei>sy Enter system view, return user view with CtrlZ. [Huawei]sysname r1 [r1]int g0/0/1 [r1-GigabitEthernet0/0/1]ip add 64.1.1.1 24 Aug 4 2023 18:56:07-08:00 r1 %%01IFNET/4/LINK_STATE(l)[0]:The line protocol…

DNS部署与安全详解(上)

文章目录 一、DNS二、域名组成1. 域名组成概述2. 域名组成 三、监听端口四、DNS解析种类1. 按照查询方式分类&#xff1a;2. 按照查询内容分类&#xff1a; 五、DNS服务器搭建过程1. 先确保服务器的IP地址是固定的2. 安装DNS软件 一、DNS DNS全称Domain Name Service&#xff0…

人工智能安全-3-噪声数据处理

0 提纲 噪声相关概述噪声处理的理论与方法基于数据清洗的噪声过滤主动式过滤噪声鲁棒模型1 噪声相关概述 噪声类型: 属性噪声:样本中某个属性的值存在噪声标签噪声:样本归属类别关于噪声分布的假设:均匀分布、高斯分布、泊松分布等。 标签噪声的产生原因: (1)特定类别…

【GEMM预备工作】行主序和列主序矩阵的内存中的连续性,解决理解问题

在内存存储中&#xff0c;默认矩阵是按照行优先储存的&#xff0c;即矩阵的每一列在内存中是连续的。行优先矩阵储存中行数据是不连续的。 而对于列主序的矩阵&#xff0c;是按照列优先储存的&#xff0c;即矩阵的每一行在内存中是连续的。列优先矩阵储存中列数据是不连续的&am…

ReentrantLock锁并发环境线程安全读写ArrayList,Kotlin

ReentrantLock锁并发环境线程安全读写ArrayList&#xff0c;Kotlin import kotlinx.coroutines.* import java.util.concurrent.locks.ReentrantLock import kotlin.collections.ArrayList/*** 假设这样一种场景&#xff1a;在多线程的并发环境中&#xff0c;不同的线程/协程对…

python在函数中更改外部变量值

目录 前言 列表、字典&#xff08;可变对象&#xff09; 元组&#xff08;不可变对象&#xff09; 全局变量 前言 今天在写LeetCode题时&#xff0c;发现一个问题我并没有掌握&#xff0c;那就是如何在Python的函数中更改变量值&#xff08;包括列表&#xff0c;字典&…

使用自适应去噪在线顺序极限学习机预测飞机发动机剩余使用寿命(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

如何在终端设置代理(设置jupyter notebook同理)

设置代理 在终端(我用的gitbash)下执行 set HTTP_PROXYhttp://<user>:<password><proxy server>:<proxy port> set HTTPS_PROXYhttp://<user>:<password><proxy server>:<proxy port>其中&#xff1a; user、password&#…

环球数科、BUFFALO面试(部分)

环球数科 系统复杂且需求迭代频繁&#xff0c;如何维护微服务之间的接口调用关系&#xff1f; API接口在设计的时候需要大量的需求文档&#xff0c;而且文档也需要不断维护。如何高效维护API文档就很重要了。以下是一些常见的API管理工具&#xff1a;Swagger&#xff1a;Swag…

python机器学习(七)决策树(下) 特征工程、字典特征、文本特征、决策树算法API、可视化、解决回归问题

决策树算法 特征工程-特征提取 特征提取就是将任意数据转换为可用于机器学习的数字特征。计算机无法直接识别字符串&#xff0c;将字符串转换为机器可以读懂的数字特征&#xff0c;才能让计算机理解该字符串(特征)表达的意义。 主要分为&#xff1a;字典特征提取(特征离散化)…

zabbix监控mysql容器主从同步状态并告警钉钉/企业微信

前言&#xff1a;被监控的主机已经安装和配置mysql主从同步&#xff0c;和zabbix-agent插件。 mysql创建主从同步&#xff1a;http://t.csdn.cn/P4MYq centos安装zabbix-agent2&#xff1a;http://t.csdn.cn/fx74i mysql主从同步&#xff0c;主要监控这2个参数指标&#xf…

JavaScript 中的隐式类型转换

一、什么情况会发生隐式类型转换&#xff1f; 1、加号&#xff08;&#xff09; 号比较特殊&#xff0c;既可以当做算数运算符做加法&#xff0c;又可以当做字符串连接符 ① 算数运算符 除了 string 类型以外的原始数据类型进行加法运算时&#xff0c;非数字类型会转换为数字…

unity制作FPS射击游戏

文章目录 介绍鼠标移动控制视角行走、奔跑、跳跃、下蹲射击、后坐力、射速、瞄准、弹痕、枪火、抛壳手臂摇摆手枪切枪效果动画状态机玩家血量新地图场景颜色渐变激光墙获取钥匙滑动门NPC属性攻击逻辑终点传送门 介绍 角色动作方面包括行走、奔跑、跳跃、武器切换、弹夹更换、武…

科技引领,教育革新|EasyV助力数字孪生智慧教育建设!

数字孪生校园是以物联网、大数据、云计算、人工智能、三维可视化等新型数字化技术为基础&#xff0c;构建的数智校园的“大脑”。对校园的人、车、资产设施、各业务系统进行全联接&#xff0c;实现数据全融合、状态全可视、业务全可管、事件全可控&#xff0c;使校园更安全、更…

elasticSearch常见的面试题

常见的面试问题 描述使用场景 es集群架构3个节点&#xff0c;根据不同的服务创建不同的索引&#xff0c;根据日期和环境&#xff0c;平均每天递增60*2&#xff0c;大约60Gb的数据。 调优技巧 原文参考&#xff1a;干货 | BAT等一线大厂 Elasticsearch面试题解读 - 掘金 设计阶…

【《快速构建AI应用——AWS无服务器AI应用实战》——基于云的解决方案快速完成人工智能项目的指南】

基于云的人工智能服务可以自动完成客户服务、数据分析和财务报告等领域的各种劳动密集型任务。其秘诀在于运用预先构建的工具&#xff0c;例如用于图像分析的Amazon Rekognition或用于自然语言处理的AWS Comprehend。这样&#xff0c;就无须创建昂贵的定制软件系统。 《快速构…

PADS过孔操作

过孔须先在Layout内设置好类型&#xff0c;然后在“过孔配置”选项页将使用的过孔勾选。 2&#xff09;有多个过孔类型&#xff0c;可以先指定当前设计时使用的过孔类型。布线操作期间&#xff0c;右击在“过孔类型”选项内选择“通孔类过孔”或者“自动类过孔”&#xff0c;选…

探索产品项目管理软件的种类及功能

随着科技的不断发展&#xff0c;越来越多的企业开始重视产品项目管理的重要性。产品项目管理软件作为一种有效的工具&#xff0c;可以帮助企业更好地规划、执行和控制项目&#xff0c;提高项目的成功率。本文将分为两部分&#xff0c;分别介绍产品项目管理软件的功能以及一些知…

MySQL数据库安装(二)

夕阳留恋的不是黄昏&#xff0c;而是朝阳 上一章简单介绍了MySQL数据库概述(一), 如果没有看过, 请观看上一章 一. MySQL 卸载 一.一 停止MySQL服务 在卸载之前&#xff0c;先停止MySQL8.0的服务。按键盘上的“Ctrl Alt Delete”组合键&#xff0c;打开“任务管理器”对话…