关于静态与动态编译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 ...
随机推荐
- Cocos2d-x 学习(1)—— 通过Cocos Studio创建第一个Demo
近期在工作上有了比較大的转变,自学情绪也慢慢高涨,本来一直在研究unity的技术.由于换了工作会開始接触cocos2d-x.但并不意味着停止研究unity,以后有时间还是会继续的. 公司的cocos2 ...
- 【免费讲座IX算法第一阶段】转专业找CS工作“打狗棒法”
个人经验CS不相干,如何收拾简历?如何获取知识,在最短的时间内找到一份工作需要?如何避免盲目刷称号,迅速制定学习计划?如何准备面试? 星期五.九算法黄蓉老师受邀嘉宾 [在线共享] 她成功转专业的六个月 ...
- MSSQL - 存储过程OutPut返回值
1.存储过程中不使用外部参数. 存储过程: SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ========================== ...
- 在界面线程不能使用Sleep和WaitForSingleObject之类的函数, 使用 MsgWaitForMultipleObjects
http://blog.csdn.net/wishfly/article/details/3726985 你在主线程用了WaitForSingleObject,导致了消息循环的阻塞,界面假死. 然后在 ...
- C++ 载入dll
1.新建一个项目生成dll 首先我们新建一个项目生成一个Dynamic Library(动态链接库) dll 里面非常简单,只有一个add方法.等下我们就要在其他项目里尝试载入这个dll,调用里面的这 ...
- Github上四种Lisp方言的流行度 | 肉山博客 (Wenshan's Blog)
Github上四种Lisp方言的流行度 | 肉山博客 (Wenshan's Blog) Github上四种Lisp方言的流行度
- POJ 3974 最长回文字串(manacher算法)
题意:给出一个字符串,求出最长回文字串. 思路:一开始我直接上了后缀数组DC3的解法,然后MLE了.看了DISCUSS发现还有一种计算回文字串更加优越的算法,就是manacher算法.就去学习了一下, ...
- Load and Unload
一.前言 在前一段时间,我遭遇了一个现象诡异的Bug,最后原因归结为在DllMain里错误地调用了FreeLibrary(在本文最后对此Bug有详细的解释). MSDN里关于禁止在DllMain里调用 ...
- 用VBA宏从一个工作薄复制内容到另一个工作薄
我们项目管理有两个工作薄,一个里面有多个表,每天建一个,记录当天项目,另一个工作薄,有多个表,其中一个是所有项目汇总. 以前都是第一个工作薄一个表做完,再复制粘贴到第二个工作薄的汇总表中. 写了个VB ...
- [项目整理]Win32,MFC的可执行文件只能运行一次
//第一种方法:控制release版本的exe文件只能运行一次 #ifndef _DEBUG //debug 版本中,项目属性-->预处理器 -->预处理定义: 有_DEBUG if (F ...