当前位置:首页 » 服务器技术
开发技术指南» 文章正文
    引言: 在为Linux开发应用程序时,绝大多数情况下使用的都是C语言,因
 

 

    摘要:在网络应用日益普遍的今天,越来越多的嵌入式设备实现internet网络化。tcp/ip协议是一种目前被广泛采用的网络协议。嵌入式internet的技术核心是在嵌入式系统中部分或完整地实现tcp/ip协议。由于tcp/ip协议比较复杂,而目前嵌入式系统中大量应用低速处理器,受内存和速度限制,有必要将tcp/ip协议简化。 图1 协议处理 1 tcp/ip协议的实现 嵌入式tcp/ip协议一般实现:arp/rarp、ip、icmp、tcp、udp、htt......
 ·flashclash比赛ria获奖作品    »显示摘要«
    摘要:| 比赛网站地址 | 第一名:室内设计软件 第二名:图像处理软件 第三名:客户关系软件 ......


GCC起步

在为linux开发应用程序时,绝大多数情况下使用的都是c语言,因此几乎每一位linux程序员面临的首要问题都是如何

标准的编译系统,能够编译用c、c++与object c等语言编写的程序.gcc不仅功能非常强大,结构也异常灵活.最值得称 【相关文章:如何写系统分析书

灵活运用c编译器.目前linux下最常用的c语言编译器是gcc(gnu compiler collection),它是gnu项目中符合ansi c 【扩展阅读:VoIP技术之我见

开放、自由与灵活是linux的魅力所在,而这一点在gcc上的体现就是程序员通过它能够更好地控制整个编译过程.在 【扩展信息:开源的 BugTracker.net 错

道的一点就是它可以通过不同的前端模块来支持各种语言,如java、fortran、pascal、modula-3与ada等.

使用gcc编译程序时,编译过程可以被细分为四个阶段:

◆ 预处理(pre-processing)

◆ 编译(compiling)

◆ 汇编(assembling)

◆ 链接(linking)

linux程序员可以根据自己的需要让gcc在编译的任何阶段结束,以便检查或使用编译器在该阶段的输出信息,或者对

最后生成的二进制文件进行控制,以便通过加入不同数量与种类的调试代码来为今后的调试做好准备.与其它常用的

编译器一样,gcc也提供了灵活而强大的代码优化功能,利用它可以生成执行效率更高的代码.

gcc提供了30多条警告信息与三个警告级别,使用它们有助于增强程序的稳定性与可移植性.此外,gcc还对标准的c与

c++语言进行了大量的扩展,提高程序的执行效率,有助于编译器进行代码优化,能够减轻编程的工作量.

gcc起步

在学习使用gcc之前,下面的这个例子能够帮助用户迅速理解gcc的工作原理,并将其立即运用到实际的项目开发中去.

首先用熟悉的编辑器输入清单1所示的代码:

清单1:hello.c

#include <stdio.h>

int main(void)

{

 printf ("hello world, linux programming!\n");

 return 0;

}

 

然后执行下面的命令编译与运行这段程序:

# gcc hello.c -o hello

# ./hello

hello world, linux programming!

 

从程序员的角度看,只需简单地执行一条gcc命令就可以了,但从编译器的角度来看,却需要完成一系列非常繁杂的工

作.首先,gcc需要调用预处理程序cpp,由它负责展开在源文件中定义的宏,并向其中插入“#include”语句所包含的

内容;接着,gcc会调用ccl与as将处理后的源代码编译成目标代码;最后,gcc会调用链接程序ld,把生成的目标代码

链接成一个可执行程序.

为了更好地理解gcc的工作过程,可以把上述编译过程分成几个步骤单独进行,并观察每步的运行结果.第一步是进行

预编译,使用-e参数可以让gcc在预处理结束后停止编译过程:

#  gcc -e hello.c -o hello.i

 

此时若查看hello.cpp文件中的内容,会发现stdio.h的内容确实都插到文件里去了,而其它应当被预处理的宏定义也

都做了相应的处理.下一步是将hello.i编译为目标代码,这可以通过使用-c参数来完成:

#  gcc -c hello.i -o hello.o

 

gcc默认将.i文件看成是预处理后的c语言源代码,因此上述命令将自动跳过预处理步骤而开始执行编译过程,也可以

使用-x参数让gcc从指定的步骤开始编译.最后一步是将生成的目标文件链接成可执行文件:

#  gcc hello.o -o hello

 

在采用模块化的设计思想进行软件开发时,通常整个程序是由多个源文件组成的,相应地也就形成了多个编译单元,使

用gcc能够很好地管理这些编译单元.假设有一个由foo1.c与foo2.c两个源文件组成的程序,为了对它们进行编译,并

最终生成可执行程序foo,可以使用下面这条命令:

#  gcc foo1.c foo2.c -o foo

 


...   下一页
 ·剖析linux系统启动过程(三)    »显示摘要«
    摘要:1.启动系统.当pc机加电开始启动时,80x86的处理器(cpu)在实模式下自检,开始执行物理地址0xffff0即rom-bios的起始地址处的代码。pc机的bios进行系统自检,初始化中断向量表到物理地址0x0。然后把引导设备的第一个扇区加载到地址0x7c00,执行此处的指令。到这里与linux无关,x86系列的硬件设置如此. linux的内核本身是不能自举的,所以lilo和loadlin的作用就是加载系统内核.有关lilo的原理可以参考lilo的re......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE