go语言与UPX

源自:压缩工具之upx_51CTO博客_za压缩工具

下面是直接copy的:

在golang项目中, 最终运行的是打包好的二进制文件,如何才能让这个文件尽可能的小呢?

1.编译阶段的参数处理

go build使用的是静态编译,会将程序的依赖一起打包,这样一来编译得到的可执行文件可以直接在目标平台运行,无需运行环境(例如 JRE)或动态链接库(例如 DLL)的支持。

使用ldflags传递参数:

在程序编译的时候可以加上-ldflags "-s -w"参数来优化编译,原理是通过去除部分链接和调试等信息来减小编译生成的可执行程序体积,具体参数如下:

-a:强制编译所有依赖包
-s:去掉符号表信息,不过panic的时候stace trace就没有任何文件名/行号信息了
-w:去掉DWARF调试信息,不过得到的程序就不能使用gdb进行调试了
 

可以看到添加-s参数时,可执行文件体积减小最多

若对符号表无需求,-ldflags直接添加"-s"即可

2.使用压缩工具upx

github:  https://github.com/upx/upx

[安装]

# mac
brew install upx

# centos
yum install upx

# debian/ubuntu
apt install upx-ucl
1.
2.
3.
4.
5.
6.
7.
8.
 

[使用]

# 压缩
upx  app


# 解压缩
upx -d app
1.
2.
3.
4.
5.
6.
本地测试整体体积会减少一半左右, 至少压缩在30%以上的 , 且压缩后运行没有任何问题

下面是upx的一些常用参数:

-o:指定输出的文件名
-k:保留备份原文件
-1:最快压缩,共1-9九个级别
-9:最优压缩,与上面对应
-d:解压缩decompress,恢复原体积
-l:显示压缩文件的详情,例如upx -l main.exe
-t:测试压缩文件,例如upx -t main.exe
-q:静默压缩be quiet
-v:显示压缩细节be verbose
-f:强制压缩
-V:显示版本号
-h:显示帮助信息
--brute:尝试所有可用的压缩方法,slow
--ultra-brute:比楼上更极端,very slow
-----------------------------------
©著作权归作者所有:来自51CTO博客作者zlixing的原创作品,请联系作者获取转载授权,否则将追究法律责任
压缩工具之upx
https://blog.51cto.com/u_11045899/7985833

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【SQL 新手教程 2/20】关系模型 -- 主键

💗 关系数据库建立在关系模型上⭐ 关系模型本质上就是若干个存储数据的二维表 记录 (Record): 表的每一行称为记录(Record),记录是一个逻辑意义上的数据 字段 (Column):表的每一列称为字段(Colu…

【算法】二进制常用操作

二进制常用操作 求n的二进制中第k位数字: n > > k & 1 n>>k\& 1 n>>k&1​ lowbit(x)的用法:返回x中最后一个1, l o w b i t ( x ) x & ( − x ) lowbit(x)x\&(-x) lowbit(x)x&(−x)​ 输入一个 32 位整数&a…

java如何同时继承接口和抽象类

java中要同时继承接口和抽象,需要用到的语句是 class 类名 extends 抽象类名 implements 接口 示例代码如下 interface Animal02{public String Name"牧羊犬";public void shout();public void info(); } abstract class Action01{public abstract voi…

解锁Vue的潜力:封装递归组件的经验之谈(网站导航层架嵌套)

最近在使用BootstrapVue写一个网站(我也不知道为啥要用这个😂),使用到了NavBarDropDown等一些组件的组合,可以自动创建一个响应式的效果,还不错。But…,这个DropDown只支持到二级。有人2019年就在Github上提了issue- dropdown submenu并且作者…

WebKit的CSS Aspect Ratio Box:重塑响应式设计

WebKit的CSS Aspect Ratio Box:重塑响应式设计 在响应式网页设计中,保持元素的宽高比是一个常见需求。幸运的是,CSS提供了一个名为aspect-ratio的属性,它允许开发者为元素定义一个理想的宽高比。在WebKit中,这个属性得…

吴恩达的TranslationAgent学习

TranslationAgent构成 整个[TranslationAgent (github.com)]在流程上分为短文本的一次性翻译和长文本的分chunk翻译(按照Token进行划分)。 但是不论长文本翻译还是短文本翻译,总体流程遵循执行、纠正再执行的逻辑循环实现。 这种按照自省思路…

数据库DDL | 增 删 改 操作 | 对数据库数据表

DDL建库建表(操作数据库/表)⭐️⭐️⭐️ 数据库 创建库 //create database 库名 create database xiaozhao2;查看库 //查看所有的库 show databases;删除库(危险操作) //drop database 库名 drop database xiaozhao2;使用库\切换库 //use 库名 use xiaozhao2;查看库数据…

【数字IC/FPGA】使用Verdi对比两个波形

步骤一: 使用verdi打开第一个波形 bsub verdi -ssf 1.fsdb添加需要观察的信号,如下图所示: 步骤二: 新建容器,依次点击Window --> Dock to --> New Container Window。 然后输入容器的名字,如下图所…

SQL数据库:通过在视频监控平台服务器上直接使用SQL存储过程,在海量记录中查询特定时间段内-某个摄像头的所有视频片段

目录 一、背景 1、存储过程 2、视频监控系统 二、需求和数据表 1、具体要求 2、数据表 3、部分数据 三、实现 1、目标 2、创建存储过程 (1)存储过程代码 (2)创建成功 3、存储过程的解释 4、SQL命令调用方式 5、调用…

Java----队列(Queue)

目录 1.队列(Queue) 1.1概念 1.2队列的使用 1.3队列的模拟实现 1.4循环队列 1.4.1循环队列下标偏移 1.4.2如何区分队列是空还是满 1.5双端队列 (Deque) 1.队列(Queue) 1.1概念 队列:只允许在一端进行插入数据…

训练的韧性:Mojo模型中自定义训练中断与恢复机制的实现

训练的韧性:Mojo模型中自定义训练中断与恢复机制的实现 在机器学习模型的开发过程中,训练过程可能会因为多种原因(如硬件故障、电源中断等)被迫中断。Mojo模型,作为一个泛指,可以代表任何机器学习或深度学…

Linux Redhat ens33不显示IP问题

优质博文:IT-BLOG-CN 【第一步】:查看系统网卡设备 : ip addr show 【第二步】:修改网卡配置参数 cd /etc/sysconfig/network-scripts/ vi ifcfg-ens33 修改ONBOOT参数为yes 【第三步】:重启网卡,然后ping检测…

奇怪的Excel单元格字体颜色格式

使用VBA代码修改单元格全部字符字体颜色是个很简单的任务,例如设置A1单元格字体颜色为红色。 Range("A1").Font.Color RGB(255, 0, 0)有时需要修改部分字符的颜色,如下图所示,将红色字符字体颜色修改为蓝色。代码将会稍许复杂&am…

MySQL - 优化概述

数据库性能取决于数据库层面的多个因素,例如表、查询和配置设置。这些软件构造会在硬件层面产生 CPU 和 I/O 操作,您必须尽量减少这些操作并使其尽可能高效。在致力于数据库性能优化时,您首先要了解软件方面的高级规则和指南,并使…

自定义Spring Cloud Gateway过滤器工厂:实现PrintAnyGatewayFilterFactory

在Spring Cloud Gateway中,除了可以实现全局过滤器外,还可以通过自定义过滤器工厂来实现更加灵活的过滤器配置。本文将带领大家学习如何自定义一个Spring Cloud Gateway过滤器工厂,并具体实现一个打印请求头信息的过滤器工厂。以下是完整代码…

linux设置~/.vimrc步骤

日常模板(够用) #开启自动缩进 set ai #tab的宽度为2 set ts2 # tab自动转为空格 set et 扩展 设置文件格式及编码: set fileformatunix " 设置文件格式为Unix风格 set encodingutf-8 " 设置编码为UTF-8 显示行号和列号&#xf…

Java后端开发岗位面试经验总结:技术深度与实践能力的考验

面试经验分享 XXXX科技有限公司 (成都某小公司) 文章目录 面试经验分享XXXX科技有限公司笔试(100,60及格)对List中的数据进行倒序排列() 10缓存中常见的问题,怎么解决 10用户登录模块流程设计,一级登录权限的设计,数据库表结构设计,登录流程,以及权限验证(对权…

“/usr/local/nginx/logs/nginx.pid“ failed (2: No such file or directory)问题

场景:在nginx启动状态下,执行命令 nginx -s stop 和 nginx -s reload都报错: [xxxBMP-TEST-001 sbin]$ nginx -s stop nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory) 报错的意…

Linux:Linux进程控制

目录 1. 进程概念 1.1 并行和并发 2. 进程创建 2.1 fork()函数初识 2.2 写时拷贝 2.3 fork常规用法 2.4 fork调用失败的原因 3. 进程终止 3.1 进程场景 3.2 进程常见退出方法 4. 进程等待 4.1 进程等待必要性 4.2 进程等待的方法 4.2.1 wait方法: 4.…

因子分析vs主成分分析

前两篇文章介绍了因子分析与主成分分析的原理与基本步骤。初次学习时,大家可能感觉这是两个基本相同的方法,但实际上两者间还是有一定差异的。这篇文章就带大家盘点一下两个方法间的异同。 目的 因子分析:旨在识别观测变量背后的潜在因素或结…