编译
文章平均质量分 67
nancygreen
这个作者很懒,什么都没留下…
展开
-
glibc定义的系统调用
最近有人问道,glibc 中对我们常见的那些系统调用的定义在哪里?比如write(2),recv(2)。这个问题我以前在看glibc的代码时注意到了。我们通常可以直接找到的所谓定义,比如下面这个:PLAIN TEXTC:ssize_t__libc_write (int fd, const void *buf, size_转载 2012-08-10 15:49:44 · 4503 阅读 · 3 评论 -
gprof——GNU性能分析工具
gprof介绍gprof是GNU profiler工具。可以显示程序运行的“flat profile”,包括每个函数的调用次数,每个函数消耗的处理器时间。也可以显示“调用图”,包括函数的调用关系,每个函数调用花费了多少时间。还可以显示“注释的源代码”,是程序源代码的一个复本,标记有程序中每行代码的执行次数。为gprof编译程序在编译或链接源程序的时候在编译器的命令行参数中加入“-p转载 2013-05-08 13:58:30 · 824 阅读 · 0 评论 -
GNU 編譯器組合
http://cms.mcuapps.com/techinfo/toolchains/gcc/GNU Compiler Collection 意即採用 GNU 系列開源編譯器的工具組合,如果有碰過 Linux 交互編譯開發的朋友,應該對這套工具體系的概念和使用方法已經非常熟悉了。基本上你可以自行抓取這些工具程式的源碼,配合你的 host(即開發主機)環境與 target 裝置,設定相關選項转载 2013-05-09 11:16:29 · 1063 阅读 · 0 评论 -
如何为嵌入式开发建立交叉编译环境
随着消费类电子产品的大量开发和应用和Linux操作系统的不断健壮和强大,嵌入式系统越来越多的进入人们的生活之中,应用范围越来越广。在裁减和定制Linux,运用于你的嵌入式系统之前,由于一般嵌入式开发系统存储大小有限,通常你都要在你的强大的pc机上建立一个用于目标机的交 叉编译环境。这是一个由编译器、连接器和解释器组成的综合开发环境。交叉编译工具主要由 binutils、gcc 和 glibc转载 2013-05-09 11:53:24 · 629 阅读 · 0 评论 -
System Type Triplets
System Type TripletsThe Need for System IdentificationAs mentioned in Cross Compilation Quickstart, the Autotoolsgenerated configure script used to simplify cross compilation creates aMakefile转载 2013-05-13 10:49:25 · 662 阅读 · 0 评论 -
交叉编译工具链的构建原理
在一种计算机环境(称为host machine)中运行的编译程序,能编译出在另外一种环境(称为target machine)下运行的代码,叫做交叉编译。实现这个交叉编译的一系列工具,包括C函数库,内核文件,编译器,链接器,调试器,二进制工具……称为交叉编译工具链。 实际上在进行嵌入式开发时,我们通常都会在主机上(host machine)使用开发板厂商提供的编译器,调试器。比如在wind转载 2013-05-14 09:39:55 · 1277 阅读 · 0 评论 -
Building your own toolchain
Building your own toolchainContents[hide]1Selecting the right hardware1.1Arm 71.2Arm 91.3Arm 112Steps of Cross Compilation3Specifing target for your toolchain3转载 2013-05-14 18:47:17 · 980 阅读 · 0 评论 -
Makefile VPATH和vpath的使用
开始接触Makefile已经有好几个月了,最近想好好学习学习但是一个简单的问题就卡壳了很简单的一个问题|-- Makefile|-- include| `-- hello.h`-- src |-- hello.cpp `-- main.cp首先是Makefile 文件和include文件夹还有src文件夹在同一个目录下头文件hello.h在inc转载 2013-06-03 11:21:58 · 1279 阅读 · 0 评论 -
auto_inline,inline以及编译器优化之间的关系
http://blog.csdn.net/pendle/article/details/5958401对函数进行inline处理时程序优化的一种方法,由于可以减少调用函数的开销,这种方法适用于大量频繁调用的小函数,由于会将函数的内容复制到每一处调用的地方,会增加编译二进制文件的体积。 inline处理的具体流程是,在编译的时候,对于一个可以inline的函数,在每一个调用转载 2013-08-14 16:34:26 · 1835 阅读 · 0 评论 -
autotools使用(自动生成Makefile)
Makefile固然可以帮助make完成它的使命,但要承认的是,编写Makefile确实不是一件轻松的事,尤其对于一个较大的项目而言更是如此。那么,有没有一种轻松的手段生成Makefile而同时又能让我们享受make的优越性呢?本节要讲autotools系列工具正是为此而设的,它只需用户输入简单的目标文件、依赖文件、文件目录等就可以轻松地生成Makefile了,这无疑是广大用户的所希望的。另外,这转载 2013-09-29 14:28:19 · 719 阅读 · 0 评论 -
linux动态编译和静态编译
为了使用方便,可以把这两个函数接口定义为动态链接库或静态链接库。用动态链接库编译生成的可执行文件需调用.so文件方可正常运行,灵活但稍显麻烦;用静态链接库编译生成的可执行文件可直接运行,不用再调用如.so般的依赖库文件,简单但不灵活。静态链接库:1、编译生成目标文件gcc -c struct.c2、创建静态库ar cqs libstruct.a st转载 2013-11-06 11:46:06 · 863 阅读 · 0 评论 -
Astyle使用说明
Astyle使用说明Astyle是一个开源的代码美化工具,可以用于美化C/C++,C#,JAVA代码等。1 Linux下安装使用1.1 安装http://astyle.sourceforge.net/解压,编译,安装1.2 配置代码格式cat > ~/.astylerc--style=allman--indent=tab=8#--brackets=lin转载 2014-01-17 12:21:39 · 1147 阅读 · 0 评论 -
configure脚本的ac_nonexistent.h问题 (
在configure脚本生成编译环境时,在config.log中经常看到conftest.c:11:28: error: ac_nonexistent.h: No such file ordirectory这样的错误。其实是正常的,它是configure脚本用于检测编译器是否正常检查到include了一个不存在的文件。转载 2014-08-27 15:30:41 · 12093 阅读 · 0 评论 -
ARM 浮点运算详解
一:早期ARM上的浮点模拟器:早期的ARM没有协处理器,所以浮点运算是由CPU来模拟的,即所需浮点运算均在浮点运算模拟器(float math emulation)上进行,需要的浮点运算,常要耗费数千个循环才能执行完毕,因此特别缓慢。直到今天,在ARM Kernel配置时,都有如下选项:Floating point emulation --->[ ] NWFPE math emu转载 2013-05-07 17:32:32 · 1863 阅读 · 0 评论 -
mips 平台linux系统软浮点
嵌入式领域,为了节省成本和减少功耗,很多芯片都是没有浮点运算模块的,一般该模块叫做FPU(float process unit)。这种情况下,linux内核有一个模块叫math-emu的软件模块,就是用整数运算模拟浮点数运算,一般位于arch/mips/目录下。那么在应用空间的程序是怎么跑到该内核空间的模块呢。简单说就是,用工具链编译含有浮点运算的文件时,编译器并不知道目标板上没有FPU,所以遇到转载 2013-05-07 17:29:32 · 1002 阅读 · 0 评论 -
关于gcc、glibc和binutils模块之间的关系,以及在现有系统上如何升级的总结
一、关于gcc、glibc和binutils模块之间的关系1、gcc(gnu collect compiler)是一组编译工具的总称。它主要完成的工作任务是“预处理”和“编译”,以及提供了与编译器紧密相关的运行库的支持,如libgcc_s.so、libstdc++.so等。2、binutils提供了一系列用来创建、管理和维护二进制目标文件的工具程序,如汇编(as)、连接(ld)、静态库归档转载 2012-08-19 18:53:44 · 975 阅读 · 0 评论 -
关于gcc中tree和rtl的定义
tree和rtl是gcc编译器的中间层。理解tree和rtl的设计对分析gcc工作原理是至关重要的。tree更面向前端一些,tree能完全反应出源程序的处理逻辑,它记录着程序的完整“语义”。而rtl更面向后端一些,它的设计灵感源于lisp语言。rtl由tree来生成,但rtl是线性的,与机器语言很靠近。也即是说,rtl可以认为是一个高度抽象的计算机机器语言,由rtl语言表示的程序可以很容易转载 2012-08-19 18:58:35 · 2604 阅读 · 0 评论 -
Linux 静态库与动态库搜索路径设置
1. 连接和运行时库文件搜索路径到设置 库文件在连接(静态库和共享库)和运行(仅限于使用共享库的程序)时被使用,其搜索路径是在系统中进行设置的。一般 Linux 系统把 /lib 和 /usr/lib 两个目录作为默认的库搜索路径,所以使用这两个目录中的库时不需要进行设置搜索路径即可直接使用。对于处于默认库搜索路径之外的库,需要将库的位置添加到库的搜索路径之中。设置库文件的搜转载 2013-02-18 11:59:19 · 494 阅读 · 0 评论 -
解决undefined reference to `__aeabi_uidivmod'、 `__aeabi_uidiv'错误
自己写裸机驱动程序时,使用了除法,在链接的时候出了如下错误: 使用的编译器是: 后来上网搜了一下原因,由于编译器不支持除法运算,但是也没有搜到解决方案。看了一下代码确实用到了除法,把除法去掉可以正常连接通过。后来想了想了,之前编译内核和编译u_boot都是这个编译器的呀,他们肯定有除法运算呀,他们是怎么做到的呢? 于是看了一下u_boot的M转载 2013-02-25 17:57:15 · 2279 阅读 · 0 评论 -
交叉编译SPECCPU2006
为了在模拟器(gem5等)上、arm开发板上运行SPECCPU2006,需要交叉编译之,本文提供交叉编译SPECCPU2006的步骤。1、下载SPECCPU2006.iso(http://www.spec.org/)2、因为下载的是iso格式,需要mount到linux的某个目录下再进行操作。# mount iso9660 path-to-SPECXX.iso /mnt/转载 2013-04-25 20:49:48 · 4040 阅读 · 6 评论 -
SPEC2006编译经历
(Standard Performance Evaluation Corporation)标准性能评估公司(SPEC) 是一个非营利性机构。开发的基准程序集主要用来测试CPU等性能。今天帮同学编译SPEC2006,写个报告,具体编译过程中随平台环境等因素可能会发生不同的错误,下面是我所遇到的问题及解决方法。 编译过程:1、解压源码。tar xzvf spec2006-12-9-0转载 2013-04-25 20:51:20 · 2022 阅读 · 0 评论 -
Fortran77-90-95
Fortran语言的历史Fortran是英文FORmula TRANslation的缩写, 意为"公式翻译". 为科学, 工程问题中那些能够用数学公式表达的问题而设计的语言, 主要用于数值计算. Fortran至今已经有四十多年历史. 第一代Fortran是1954年提出来的, 称为FortranI. 它于1956年在IBM 704计算机上实现的. 是由IBM的John Backus提出并开发转载 2013-04-26 19:06:35 · 8198 阅读 · 0 评论 -
关于LD_LIBRARY_PATH的问题; 为什么说LD_LIBRARY_PATH不好
本人在/etc/environment中设置了环境变量:JAVA_HOME=/opt/javaORACLE_HOME=/home/user2/LD_LIBRARY_PATH=/usr/lib:/usr/local/lib 正常情况下执行没有问题,但使用sudo XXXXXXX的时候,其他变量都好使,除了LD_LIBRARY_PATH; 经探索,找到原因:转载 2013-04-26 19:04:33 · 2721 阅读 · 0 评论 -
iostream.h和iostream 区别
C++中新定义的方法都是有名字空间的 比如cout就属于std名字空间 如果include头文件的时候加上.h,默认会using namespace 否则需要自己加上 using namespace XXX 对于C中已经定义的方法如printf,没有影响的iostream.h是包含输入/输出流处理的头文件,iostream就什么都不是了 但用iostream要加名词空间namespac转载 2013-04-27 15:43:07 · 657 阅读 · 0 评论 -
关于Linux静态库和动态库的分析
1.什么是库在windows平台和linux平台下都大量存在着库。本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。由于windows和linux的本质不同,因此二者库的二进制是不兼容的。本文仅限于介绍linux下的库。2.库的种类linux下的库有两种:静态库和共享库(动态库)。二者的不同点在于代码被载入的时刻不同。静态库的代码在编译过转载 2013-04-28 17:22:47 · 565 阅读 · 0 评论 -
GCC中的Intrinsics头文件与SIMD指令集、宏、参数的对应表
原文地址:http://www.cnblogs.com/zyl910/archive/2012/08/27/intrin_table_gcc.html列名解释——GCC470:GCC 4.7.0 (Fedora 17)。/usr/lib/gcc/i686-redhat-linux/4.7.0/include/。GCC462:GCC 4.6.2 (MinGW)。\lib\gcc\ming转载 2013-05-03 16:23:55 · 2988 阅读 · 0 评论 -
【转】Ubuntu安装gcc3.3.6(转)
因为编译软件的需要,Ubuntu 10.04 LTS自带的gcc4.4.3版本太高,需要gcc3.x,因此需要安装低版本的gcc,我选择的是gcc3.3.6。第一、下载deb安装包,我选择源码包编译安装会出错,因此选择deb包安装;我下载的包为:cpp-3.3_3.3.6-15ubuntu6_i386.debgcc-3.3_3.3.6-15ubuntu6_i386.debgcc-3转载 2013-05-05 16:00:40 · 1189 阅读 · 0 评论 -
调试 configure
调试 configure当程序不能编译时怎么办通常,在软件包的 README 文件中只能找到非常简单的“编译说明:运行 configure,然后运行 make”。但是,这样行不通时怎么办?在本文中,Peter Seebash 讲述了当自动的配置脚本失效时应该如何去做——以及作为开发者您应如何尽量避免这种错误。毕竟,如果您的程序无法编译,其结果将和您的程序编译后不能运行一样,您的用户转载 2014-08-27 15:38:31 · 805 阅读 · 0 评论