关于静态与动态编译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平台程序的比较,布布扣,bubuko.com

时间: 2024-10-20 04:04:51

关于静态与动态编译arm平台程序的比较的相关文章

Linux下编译静态MinGW环境,编译windows平台Qt程序(使用MXE)

参考链接: MXE.>大多数程序都是在windows平台下开发的程序.windows 在现实中也是绕不过的一个系统平台,做为受过几年VC,MFC”虐待”的程序员,在做为一个程序员之前是一位Linux重度使用者,受够了MFC之后一直想要找一个框架替换,使用过GTK,wxWidgets,Qt,最后还是Qt用得多一些.我认为程序跨平台应该是一个基本标准,同一份代码不需改动,或者改动极少,放在不同的平台下编译就能使用.不同平台,同样的界面,同样的操作,同样的体验.这里要讲的是我如何在Linux 下开发跨

IMX6开发板qt creator直接编译ARM架构程序

除了通过 11.2.2 小节通过命令行的操作来编译在 iTOP-imx6 开发板上运行的程序,还可以直接在 qtcreator 上设置,然后每次编译的程序都可以在开发板上运行.如下图所示,打开 qtcreater 如下图操作 添加 GCC 编译器,如下图所示. 添加编译器路径,点击 apply 如下图. 选择 Qt 版本,如下图. 选择 qt4.7.1 的 qmake 路径点击 apply,如下图. 选择构建套件,如下图. 配置 QT4.7.1 信息,如下图. 到此配置完成,下面举例.新建工程,

让C#语言充当自身脚本!——.NET中的动态编译

原文:让C#语言充当自身脚本!--.NET中的动态编译 代码的动态编译并执行是.NET平台提供给我们的很强大的一个工具,用以灵活扩展(当然是面对内部开发人员)复杂而无法估算的逻辑,并通过一些额外的代码来扩展我们已有 的应用程序.这在很大程度上给我们提供了另外一种扩展的方式(当然这并不能算是严格意义上的扩展,但至少为我们提供了一种思路). 动态代码执行可以应用在诸如模板生成,外加逻辑扩展等一些场合.一个简单的例子,为了网站那的响应速度,HTML静态页面往往是我们最好的选择,但基于数据驱动的网站往往

arm平台编译动态库报 relocation R_ARM_MOVW_ABS_NC 错误解决

编译一个能在 arm 平台上用的动态库,结果报错如下: relocation R_ARM_MOVW_ABS_NC against `a local symbol' can not be used when making a shared object; recompile with -fPIC ./obj/xxx.o: could not read symbols: Bad value collect2: error: ld returned 1 exit status 其实错误信息已经给出解决

C/C++ 跨平台交叉编译、静态库/动态库编译、MinGW、Cygwin、CodeBlocks使用原理及链接参数选项

目录 0. 引言 1. 交叉编译 2. Cygwin简介 3. 静态库编译及使用 4. 动态库编译及使用 5. MinGW简介 6. CodeBlocks简介 0. 引言 UNIX是一个注册商标,是要满足一大堆条件并且支付可观费用才能够被授权使用的一个操作系统.linux是unix的克隆版本,是由其创始人Linus和诸多世界知名的黑客手工打造的一个操作系统.为什么linux和unix之间有很多软件可以很轻松的移植?因为linux也满足POSIX规范,所以在运行机制上跟unix相近.同时,POSI

busybox静态编译及动态编译实践

1. 简介 BusyBox 是一个集成了一百多个最常用linux命令和工具的软件.BusyBox 包含了一些简单的工具,例如ls.cat和echo等等,还包含了一些更大.更复杂的工具,例grep.find.mount以及telnet.有些人将 BusyBox 称为 Linux 工具里的瑞士军刀. 简单的说BusyBox就好像是个大工具箱,它集成压缩了Linux的许多工具和命令.除此之外,提供了良好的编程框架,用户能够将自己的命令集成到busybox当中.在实际的使用过程中,busybox常常被用

亲测VS2010纯静态编译QT4.8.0,实现VS2010编译调试Qt程序,QtCreator静态发布程序(图文并茂,非常详细)

下载源代码,注意一定是源码压缩包如qt-everywhere-opensource-src-4.8.0.zip,不是Qt发布的已编译的不同版本的标准库如qt-win-opensource-4.8.0-vs2010.exe,这些版本都只是动态编译的,不是我们所需要的.只有用源码包才能做真正的纯静态编译,如果用Qt官网已编译的标准库.exe文件进行编译,有可能出现各种错误,而且编译后的文件巨大,我当时就在这里绕了很大的弯子,请童鞋们注意啦!!可能有些老鸟会笑话,但我本着最严肃的态度告诉菜鸟们,上网查

VC , Linux 静态编译与动态编译 (MD, MT)

首先从Linux下开始讲起,因为Linux编程对程序的理解要清楚一些,相比之下VC就比较容易糊涂. 当动态编译时,你发布的程序体积较小,在运行的时候需要同时提供你用到的dll / so文件. 当静态编译时,你发布的程序体积较大,包含所有符号,运行时不需要其他的 dll / so的支持,可以独立运行. 静态编译的目的是使发布的程序可以独立运行,不依赖于其他*.so,在技术上是把所有依赖的符号打包链接进了目标程序.这时候你会发现编译出来的程序的体积要大一些(Link的速度也会慢一些). 编译过程分为

win7下vs2010编译使用静态和动态库

知识补充: sqlite3.dll动态链接库,它允许程序共享执行特殊任务所必需的代码和其他资源. 动态的sqlite3.lib相当于一个h文件,是对实现部分(.dll文件)的导出部分的声明.编译后只是将导出声明部分编译到宿主程序中,其生成的sqlite3.exe在运行时需要相应的dll文件支持 . 静态的sqlite3.lib将导出声明和实现都放在lib中.编译后所有代码都嵌入到宿主程序,其生成的sqlite3.exe可直接运行. 任务: 一.使用VS2010编译sqlite3,生成动态的sql