关于静态与动态编译arm平台程序的比較
因为近期弄个console程序,调用了readline,ncurses库,这两个动态库加起来有四百多k。而程序事实上非常小,其它地方也没使用到这两个库
所以想静态编译看看console程序有多大。
#arm-linux-gcc cli.c -o console libreadline.a libncurses.a
#ls -l
total 1932
-rwxrwxr-x 1 root root 8427 Jul 7 15:19 cli
-rw-r--r-- 1 root root 6647 Jul 7 17:57 cli.c
-rwxr-xr-x 1 root root 624681 Jul 8 15:00 console
-rw-r--r-- 1 root root 108398 Jul 7 16:05 libhistory.a
-rw-r--r-- 1 root root 433720 Jul 7 17:09 libncurses.a
-rw-r--r-- 1 root root 780788 Jul 7 16:05 libreadline.a
一看有六百多k。貌似大了点,加上-s试试
# arm-linux-gcc cli.c -o console libreadline.a libncurses.a -s
# ls -l
total 1576
-rwxrwxr-x 1 root root 8427 Jul 7 15:19 cli
-rw-r--r-- 1 root root 6647 Jul 7 17:57 cli.c
-rwxr-xr-x 1 root root 259323 Jul 8 15:03 console
-rw-r--r-- 1 root root 108398 Jul 7 16:05 libhistory.a
-rw-r--r-- 1 root root 433720 Jul 7 17:09 libncurses.a
-rw-r--r-- 1 root root 780788 Jul 7 16:05 libreadline.a
剩下260多k这样。貌似能接受。
回过来再看看动态库链接下的console程序
#arm-linux-gcc cli.c -o console -lreadline -lncurses
# ls -l
total 1332
-rwxrwxr-x 1 root root 8427 Jul 7 15:19 cli
-rw-r--r-- 1 root root 6647 Jul 7 17:57 cli.c
-rwxr-xr-x 1 root root 10445 Jul 8 15:12 console
-rw-r--r-- 1 root root 108398 Jul 7 16:05 libhistory.a
-rw-r--r-- 1 root root 433720 Jul 7 17:09 libncurses.a
-rw-r--r-- 1 root root 780788 Jul 7 16:05 libreadline.a
10.2k的样子。加上动态库也就四百多k
再进一步加上-s试试
#arm-linux-gcc cli.c -o console -lreadline -lncurses -s
# ls -l
total 1328
-rwxrwxr-x 1 root root 8427 Jul 7 15:19 cli
-rw-r--r-- 1 root root 6647 Jul 7 17:57 cli.c
-rwxr-xr-x 1 root root 6839 Jul 8 15:13 console
-rw-r--r-- 1 root root 108398 Jul 7 16:05 libhistory.a
-rw-r--r-- 1 root root 433720 Jul 7 17:09 libncurses.a
-rw-r--r-- 1 root root 780788 Jul 7 16:05 libreadline.a
6.7k的样子,事实上程序是非常小的一个。程序库倒是非常大一坨。
关于静态与动态编译arm平台程序的比較的更多相关文章
- OpenCV:Debug和Release模式 && 静态和动态编译
1.Release和Debug的区别 Release版称为发行版,Debug版称为调试版. Debug中可以单步执行.跟踪等功能,但生成的可执行文件比较大,代码运行速度较慢.Release版运行速度较 ...
- Linux下编译静态MinGW环境,编译windows平台Qt程序(使用MXE)
参考链接: MXE.>大多数程序都是在windows平台下开发的程序.windows 在现实中也是绕不过的一个系统平台,做为受过几年VC,MFC”虐待”的程序员,在做为一个程序员之前是一位Lin ...
- IMX6开发板qt creator直接编译ARM架构程序
除了通过 11.2.2 小节通过命令行的操作来编译在 iTOP-imx6 开发板上运行的程序,还可以直接在 qtcreator 上设置,然后每次编译的程序都可以在开发板上运行.如下图所示,打开 qtc ...
- 使用Cordova编译Android平台程序提示:Could not reserve enough space for 2097152KB object heap
大体的意思是系统内存不够用,创建VM失败.试了网上好几种方法都不行,最后这个方法可以了: 开始->控制面板->系统->高级设置->环境变量->系统变量 新建变量: 变量名 ...
- JIT(动态编译)和AOT(静态编译)编译技术比较
Java 应用程序的性能经常成为开发社区中的讨论热点.因为该语言的设计初衷是使用解释的方式支持应用程序的可移植性目标,早期 Java 运行时所提供的性能级别远低于 C 和 C++ 之类的编译语言.尽管 ...
- 让C#语言充当自身脚本!——.NET中的动态编译
原文:让C#语言充当自身脚本!--.NET中的动态编译 代码的动态编译并执行是.NET平台提供给我们的很强大的一个工具,用以灵活扩展(当然是面对内部开发人员)复杂而无法估算的逻辑,并通过一些额外的代码 ...
- [改善Java代码]慎用动态编译
建议17: 慎用动态编译 //=========这篇博文暂时理解不透......... 动态编译一直是Java的梦想,从Java 6版本它开始支持动态编译了,可以在运行期直接编译.java文件,执行. ...
- Tensorflowlite移植ARM平台iMX6
一.LINUX环境下操作: 1.安装交叉编译SDK (仅针对该型号:i.MX6,不同芯片需要对应的交叉编译SDK) 编译方法参考:手动编译用于i.MX6系列的交叉编译SDK 2.下载Tensorflo ...
- 基于.NetCore开发博客项目 StarBlog - (12) Razor页面动态编译
系列文章 基于.NetCore开发博客项目 StarBlog - (1) 为什么需要自己写一个博客? 基于.NetCore开发博客项目 StarBlog - (2) 环境准备和创建项目 基于.NetC ...
随机推荐
- Javascript 进阶 封装
js中处处是对象,面向对象的第一步当然就是封装了,由于Js中没有类的概念,所以封装起来也比较麻烦,下面介绍两种js的封装. 1.使用约定优先的原则,将所有的私有变量以_开头 <script ty ...
- Beaker 1.6.4 : Python Package Index
Beaker 1.6.4 : Python Package Index Beaker 1.6.4 Download Beaker-1.6.4.tar.gz A Session and Caching ...
- Qt中用正則表達式来推断Text的语种,主要通过推断unicode的编码范围
QString MainWindow::ParseLanguage(QString Text) { if(Text.length()<=0) { return & ...
- JSP自定义标签——简单标签(2)
在前一篇博客中,我们已经学习了自定义的简单标签的基本使用方法,这一篇我们来学习如何在简单标签中添加标签属性.对自定义标签添加一些属性,可以使我们的标签功能更加灵活和复用.例如前一篇博客使用简单标签来对 ...
- 发掘ListBox的潜力(二):鼠标拖放插入点提示
鼠标拖放插入点提示 鼠标拖放是Windows常见的操作,比如拷贝文件就可用拖放方式进行.在我们编写的应用程序中,有时为了方便用户操作需要支持鼠标拖放.对于大部分的VCL控件只要鼠标将DragMode设 ...
- 算法设计与分析——多边形游戏(DP)
1.问题描述: 给定N个顶点的多边形,每个顶点标有一个整数,每条边上标有+(加)或是×(乘)号,并且N条边按照顺时针依次编号为1~N.下图给出了一个N=4个顶点的多边形. 游戏规则 :(1) 首先 ...
- SilkTest Q&A 10
92. 如何把单个表达式分两行来写? 答案1: 使用Shift + Enter 答案2: 很容易在online help里面找到答案: 1) line break in code 2) ...
- asp.net web api帮助文档的说明
为asp.net的mvc web api填写自己的帮助文档 1. 加入Help的area(能够通过命令行或其它方式加入) 命令行:Install-Package Microsoft.AspNet.We ...
- 新建表维护程序SM30
1.先新建一个客制表 2.创建一个函数组 3.SE11中该表->实用程序->表维护生成器->权限组填写&NC& -> 函数组填写刚才创建的函数组->维护 ...
- 积累的VC编程小技巧之编辑框
1.如何让对话框中的编辑框接收对话框的消息 ////////////////////////////////////////////////// 如何让对话框中的CEdit控件类接收对话框的消息/// ...