2009年4月13日星期一
七种武器
一、.NET框架(七种武器之孔雀翎)
开发人员应该熟悉.NET FrameWork体系结构和基本原理,熟悉CLR(公共语言运行时)和MSIL(中间语言),熟悉.NET框架中的委托、线程、序列化、集合、垃圾回收机制、反射等内容。
(世界上绝没有一种暗器能比孔雀翎更厉害,也绝没有一种武器能比孔雀翎更美丽……孔雀翎娇小的身躯中隐藏着巨大的威力…….NET框架的博大精深,正如同孔雀翎一样美丽而深不可测。)
二、面向对象软件开发(七种武器之霸王枪)
开发人员应该熟悉面向对象软件开发(OOP)基本概念,熟悉面向对象软件开发中的类、继承、封装、多态等概念,具备良好的面向对象软件开发思想和设计原则。
(霸王,力拔山兮气盖世。枪,百兵之祖是为枪……霸王枪是世上最霸道的兵器之一……正如面向对象软件开发,它大小通吃,不论是采用何种软件开发框架,还是使用不同的开发语言,面向对象软件开发在其中畅通无阻,霸气十足。)
三、C# (七种武器之离别钩)
开发人员应该熟练掌握C#这门面向对象编程语言,虽然.NET框架支持多种编程语言,但C#无疑是最简洁、使用者最广泛和功能最强大的一种。
(离别钩是一件武器,无论钩住人的任何部位,都能造成离别……但使用它的初衷却是为了能够与所爱的人相聚……C#是一门年轻的语言,它的出现,让更多的开发者爱上了C#,脱离了VB和ASP的阵营,造成离别。)
四、ASP.NET(七种武器之碧玉刀)
开发人员应该理解ASP.NET的页面生命周期、熟悉配置文件的格式、熟悉ASP.NET的各种服务器控件和数据控件、了解ASP.NET中的各种对象,了解ASP.NET2.0新特性。
(刀是最容易上手的武器,也是使用最广泛的武器……ASP.NET技术在网站开发当中的应用,正如同刀一样地使用频繁,更何况是一把华丽的碧玉刀。碧玉刀本身也是实力的象征,就如同ASP.NET在WEB开发中的位置。)
五、数据库(七种武器之长生剑)
开发人员需了解各种主流数据库,熟悉数据库的规范设计、精通SQL及存储过程、触发器的编写。
(长生剑,世上最锋利的剑,剑气威力强大而又持续不断、绵绵不息……正如同数据库一样,吸纳吞吐,化大象于无形,强力支撑着软件系统。要想在IT界获得长生,就看你数据库的功底了。)
六、AJAX技术(JAVASCRIPT和XML)(七种武器之多情环)
XML和JAVASCRIPT的跨平台特性,在实际软件开发中的运用越来越广泛,由于现代软件对用户界面和WEB前端的日益重视,集JAVASCRIPT和XML技术于大成的AJAX正在流行,特别是在基于WEB2.0的网站开发中。
(多情环是一种奇特的武器。无论套住了什么,立刻就紧紧地缠住,绝不会再脱手,就像多情的恋人一样……JAVASCRIPT和XML技术已经出现多年,此前一直不痛不痒,但由于集JAVASCRIPT和XML于大成的AJAX技术的出现及其在互联网上的不断应用,又重新焕发出生命活力,就像多情的环一样,将众多的开发者牢牢系住,在2006年红透了整个IT界,2007年AJAX技术将继续红火。)
七、软件体系架构(拳头)
优秀的软件离不开优秀的软件体系架构,作为开发人员,要想在IT行业更进一步,需要具备系统的、良好的软件体系架构思维,从而从更高层次决定软件的整体系统框架。
(拳头也是一种武器。而且是无可替代的武器。当分散的五指握成拳头,它的力量又岂仅仅是原来的五倍……优良的软件体系架构是整个软件开发体系的核心,就如同拳头一样,它是直接而致命的。但有一点,不是每个人的拳头都可以用做武器的。)
结束语:无论多可怕的武器,也比不上人类的信心。所以人类最厉害的武器。便是自己的信心。相信你自己,做最好的自己,你就会成功!
2009年3月14日星期六
GTK的Windows移植
(1) 需要文件:
GTK-Runtime-Environment-2.2.4-3.exe:http://prdownloads.sourceforge.net /gtk-win/GTK-Runtime-Environment-2.2.4-3.exe?download。安装到C:\RunTime_GTK。
GTK-Development-Environment- 2.2.4-3.exe:http://prdownloads.sourceforge.net/gtk-win/GTK-Development- Environment-2.2.4-3.exe?download。安装到C:\Dev-C++.
devcpp4991setup.exe,就是bloodshed的一个IDE环境: 搜索。安装到C:\Dev-C++。
(2)设置环境变量:SET PATH=%PATH%;C:\RunTime_GTK\bin;C:\RunTime_GTK\lib。在98下我直接该了autoexec.bat。
(3)运行Dev-C++,在"工具->编译选项->目录->库",加入:C:\Dev-C++\lib
(4)"工程->工程属性->参数" 或 "工具->编译选项"中的链接器框里面填入:-lgtk-win32-2.0 -lgdk-win32-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lpangowin32-1.0 -lgdi32 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lintl -liconv
(5)工具->编译选项->目录->C包含文件:
C:\Dev-C++\include\gtk-2.0
C:\Dev-C++\lib\gtk-2.0\include
C:\Dev-C++\include\atk-1.0
C:\Dev-C++\include\pango-1.0
C:\Dev-C++\include\glib-2.0
C:\Dev-C++\lib\glib-2.0\include
(5) 工具->编译选项:
-mms-bitfields
然后可以写一个最简单的GTK程序,显示一个窗口。这没有问题。我又在Linux下用glade生成了一个最简单的工程,在Dev-C++中把生成的.c 和 .h文件加入到一个Dev-C++的C工程中,也可以通过编译(好象add_pixmap_directory()这一行有问题,注释)。但是,我前几天 写的pixbuf和键盘相应的工程却加不进来,总是报告没有定义。
现在的问题是,我当然希望在Linux下的工程能够拿到Windows下直接使用。在Windows下运行Glade无法Build,报告的错误中,是使用的错误的路径,特别是使用斜杠而不是翻斜杠。 不知道在Windows下能不能使用glade.
我还希望在Windows下能够使用Makefile。mingw我也试了一下,但我现在还没有automake,autoconf工具。我想在Dev-C++中先使用Linux下建工程后生成的Makefile,不知道行不行。
2009年3月13日星期五
Dev-Cpp/Mingw32 环境介绍(1)
摘要: Dev-Cpp/Mingw32 环境介绍(1)
前言
对于现在越来越多得关于编程方面得问题和商业公司对版权问题的担心。所以向各位推荐一款类似于VC的IDE。这款IDE所使用的编译程序是 GCC的Win32版本 Mingw32。而IDE本身也是GPL协议的产物。所以,不论是商业用户,还是个人用户都能够自由的使用她,而不必为使用盗版软件而提心吊胆的。另外,由于Mingw32是GCC的Win32版本。所以,也为Win32的程序员可以了解一下Unix和类Unix下的编程感觉。而且,Mingw32对 Win32函数的支持也是很不错的。希望,我们的Mingw32之旅可以带给你快乐。
介绍
有关Dev-Cpp的介绍,我在这里不想多做解释。因为下面会具体的介绍和讲解的。我在这里只是想要介绍一下有关GCC的内容。因为,Dev-Cpp所使用的Mingw32是一款GCC编译器。所以,对GCC的了解有助于使用Dev-Cpp。
gcc.exe 这是一个C语言的编译器,负责编译C语言。这个也许大家都知道。不过,在这里我要先向大家说明一下。gcc只是一个C语言的编译器。不能识别C++代码。所以,以前所说的gcc可以编写C++是一个误传。因为,我们通常所说的GCC不是gcc.exe而是GCC的一套程序。其中就包括可以编译C++语言的 g++.exe
如果,你不确定这个gcc的版本,可以用如下的命令查看。
gcc -v
关于编译,gcc可以通过命令符编译。
gcc source.c -o binary
以上的命令,是让gcc直接由.c代码编译成可执行代码。也可以这样。
gcc -c source.c -o code.o gcc code.o -o binary
这样就生成了一组二进制代码,然后在通过二进制代码生成可执行程序。
g++.exe 刚才已经说过了,这个是一个用于编译C++代码的程序。基本用法和gcc一样。所以这里不再介绍了。只是让各位了解一下,这个程序是编译C++代码的。
gdb.exe 用于调试程序的。功能非常强大。可以调试C,C++等语言。据说还可以调试Java程序。不过我没有试过。对于gcc/g++编译出来的程序。需要再编译时加上 -g 参数。gdb才能进行调试。有点像VC的debug。
make.exe 这是一个非常有用的程序,可以用来发布程序和编译复杂关系的代码组。其实有点像提示符版的安装程序。不同的是,安装程序是一段二进制执行代码,而它是一个文本文档。 make所执行的是makefile文件。文件是一个文本文档,里面包含了程序的编译规则。如果要用提示符调用的话可以用如下方法。
make -f makefile
然后,make会根据makefile所提供的编译关系进行编译和安装。下面是一段makefile的内容。请注意,其开头的空白是 tab。
release : main.o gcc main.o -o main main.o : main.c gcc -c main.c -o main.o
然后,通过命令 make -f makefile release 就可以执行了。 make会根据文件的创造日期来判断是否要对main.o进行重新编译。也就是说,make可以知道作者修改了哪些文件,并将修改过的文件重新编译。再连接成程序。这样有助于开发者节省开发周期上的时间和精力。
好了,希望上面的介绍能让各位满意。在此,我只介绍一些主要的程序,不一一介绍其他的了。接下来我们介绍一下gcc生成的文件。
*.o 其实就是VC生成的*.obj lib*.a 就是VC中用的*.lib静态链接库。只是,每个库必须用lib开头。在调用的时候,只要提供*的内容就可以了。 *.so 虽然在Win32中很少用,几乎不用但,还是介绍一下。这个就是Win32中的*.dll动态连接库。但是,在Ming32中已经支持dll了。
好了,关于gcc的介绍就到这里。下面我们开始进入正题。
第一章 安装Dev-Cpp
在这里,我不介绍Mingw32如何安装。因为Dev-Cpp中已经包含了Mingw32。如果您想了解Mingw32如何安装,可以查看其他相关的资料。这里不作阐述。首先,我们必须下载一个Dev-CPP的安装程序。Dev-Cpp的官方网站是http://www.bloodshed.net。Dev-Cpp的网页是http://www.bloodshed.net/dev/devcpp.html最新版本应该是Dev-Cpp 4.9.9.0它的下载地址是 http://umn.dl.sourceforge.net/sourceforge/dev-cpp/devcpp4990setup.exe 。这个下载的文件中包含了全部的内容。在得到安装程序以后,我们就来安装了。不论如何,我想,安装这种小问题,我想不用再一步步介绍了吧。毕竟我们都是程序员,如果,连安装都不会那真是……。不过,如果在安装中有什么问题,可以提出。我会尽力帮你解决的。双击安装程序后,就按照平常安装的方式安装,建议按照默认安装。当然安装的路径就算便你了。在第一次安装以后,程序会提示你界面的设置。如果你喜欢英文就选择English。如果喜欢中文的,就选择Chinese。注意不要选择Chinese(TW)除非你安装了繁体中文。并喜欢繁体中文。然后是图标设置。推荐你使用New Look。如果你喜欢其他的也可以。还有就是是否使用XP风格。这些都随便你了。好了就介绍到这里,到此。我已经介绍了Dev-Cpp的安装,如果顺利。你们运行以后,就会看到如下的界面。
接下来介绍一下,有关Dev-Cpp在windows中的设置。由于GCC有很多的东西是要在提示符下进行操作的,特别是为Dev-Cpp安装,编译一些工具包。所以,我们就Mingw32添加到系统命令中,有助于以后方便调用。 方法很简单,右键单击 我的电脑。然后选色属性。使用 高级选项卡。点击环境变量按钮。点击 Path 项,点击编辑按钮。然后将DevCpp安装目录中的bin目录的路径添加到这个选项值的后面。注意,使用 ; 分隔。确定后启动命令提示符。输入 gcc -v 看。一切都好了。现在你就可以像在Linux环境下一样在Win32环境下编译程序了。
至此,您的Dev-Cpp环境就算弄好了。下面我们将介绍如何制作程序。
第二章 新建项目与编译
本章我们要进行实战训练了。介绍一下如何在Dev-Cpp下进行项目新建和编译。我相信你一定会慢慢喜欢上这个编译环境的。 点击文件菜单,选择新建,点击工程。在出现的对话框中选择你所需要的程序种类。如下图所示。
其中,Windows application是Win32图形界面。Console Application是Win32控制台程序。Static Library是Win32的静态连接库。DLL是Win32的动态连库。Empty Project是更具已有的项目类型创造一个新的项目类型。下面的内容是选择使用的语言,如是C语言还是C++语言。还有就是项目名称。这个名称将作为程序编译后的可执行程序的名称。 在这里为了方便叙述,我们就新建一个Console Application项目好了。至于使用的语言,就随便你了。我这里就用C语言为例了。点击确定后,提示项目保存的路径,建议您选择其他路径不要使用默认的路径,因为默认的路径是安装目录。如果放在那里的话,会很混乱的。在其他目录中,新建一个文件夹(当然不新建也可以,只是这样便于管理)将项目保存在那里。然后,在点击保存按钮(这个按钮就是一张磁盘,和Windows里的一样)或者从文件菜单中选择保存或者Ctrl + S。这些都可以。这样,Dev就会提示你项目中默认文件的保存目录。通常名为main.*。选择一个路径,保存就好了。(建议和项目文件保存在一起)
下面我们就来编译程序了。点击工具栏,第二行,第一个彩色的按钮。就进行编译了。这时会出现一个编译窗口,显示编译的进度。你可以通过环境选项来设置它。在编译完成后,点击第二个白色的按钮,就可以运行程序了。是不是很方便?我也是那么觉得。
接下来,我就来介绍一下,有关项目目录内的文件的作用。
main.c 程序的C语言源代码。 main.o main.c的二进制代码。 Makefile.win 就像我上面所说的,这个是项目的Makefile文件。用make命令可以编译程序的。 *.dev *的内容视你项目的名称所定。这个是项目文件,用于记录你对项目的设置。有关文件内个字段的作用就不做介绍了。 *.exe 你所生成的可执行程序。
最后,我介绍一下如何不用IDE来编译生成程序。首先进入您项目所在的目录。然后用如下命令。
make -f makefile.win all
就可以编译了。当然,也可以直接通过编译源代码来实现。具体的方法,我已经在开头介绍过了。这里就不再重复介绍了。
文外音: 文章就暂时介绍到这里,以后还会继续介绍。有关Dev-Cpp/Mingw32更多的内容以后会一一为各位展示。敬请期待。另外,还希望各位多多指教。我的格言:不论是程序还是思想,唯有通过不断的交流才能愈加完善。
STUDIO 软件开发组
北斗星君(黄庠魁)
Dev-Cpp/Mingw32 环境介绍(2)
上文回顾:
上文(《Dev-Cpp/Mingw32 环境介绍(1)》)我们知道了该如何安装和使用Dev-Cpp。并且,知道了一些有关Mingw32的一些用法和一些有关程序的介绍和使用方法。学会了一些基本操作的方法。如新建项目,编译项目等。这一次,我们将继续上一次的内容。
第三章 为你的Dev-Cpp安装开发包
对于许多程序员来说,让一套喜欢的开发包和一个自己喜欢的IDE结合在一起是最高兴不过的了。自然我也是。上一次我们了解了在Dev-Cpp中如何新建项目。但是,美中不足的是,她似乎只能新建一些简单的程序。比如控制台程序,动态连接库,静态连接库等。似乎要完成一项复杂的工作有些困难。当然,C/C++语言是一门鼓励代码重用的开发语言,我们可以对每个新建的项目进行设置,从而使用自己喜欢并习惯的开发包。但是,这或许太过于繁琐了。而且,安装,编译这些开发包的文件也太过于麻烦了。所以,Dev-Cpp也就为各位开发者提供了 包 的概念。在Dev-Cpp中有一个包管理系统。使用这个系统,你可以方便的安装各种开发包。有了这个,你的Dev就会越来越顺手。那就像《人月》中的一篇文章的标题《Sharp Tool》(锐利的工具)那样了。下面我们就来一步步学习如何安装开发包。首先,我们必须有一个已经做好了的开发包。我们可以从Dev-Cpp的官方网站获得。这里是开发包的下载页面的地址 www.bloodshed.net/dev/packages/index.html 在上面你可以找到很多你熟悉的工具。当然,如果没有也有和你喜欢的工具类似的工具。如果,你觉得这些工具太古来了,或者还不够。在页面的下方就有一些镜像站点的地址。通常,这些镜像的内容要比主站丰富许多。所以,你可以从很多途径得到这些包。现在我们就随便下载一个作为演练。如果你不建议,我们就下载一个 Fast Light Toolkit。当然,你也可以下载其他包。我这里只是作为讲解。 在下载完成以后,我们将会得到一个后缀名为 *.DevPak 的文件。这个就是开发包文件。这个文件的使用和我们平时使用的安装文件一样。不同的是,安装文件会修改注册表,将安装信息些进去。如果系统重新安装,就需要重新安装程序。而这个安装文件不会将安装信息写入注册表。并且,只要安装程序的目录没有删除。下次安装的时候,就不许要再安装了。除非使用的 Mingw32过新或者过旧无法支持。现在,我们好好的保存这个文件。 接下来话分两头,我们来介绍一下 Package Manager 这个程序你可以用两种方法启动。一种是点击Dev中的工具菜单,选中最后一项的Package Manager。另一种方法是到安装目录中,直接运行 Packman.exe 。运行以后你就会看到如下的一个界面。
如果,你运行以后没有看到左侧的工具栏或者上面的工具栏。你可以在View菜单中将其中的选项全部选上就可以了。下面介绍有关操作的一些方法。其中,Install按钮是用来安装开发包了。而Verify按钮是用来检查开发包的完整性的。而Remove按钮是用来删除开发包的。这个界面中间空白的部分是显示开发包图标的,左侧的工具栏是用来显示开发包信息的。其中包括开发包的名称、版本号、介绍和提供的站点等信息。上方的工具栏是用方便用户操作的。基本上菜单中有的。工具栏上都有了。所以,普通的工作工具条就可以完成了。
好了,到这里。我们的话再说回来。所谓言规正传,大概就是派这个用场的吧。(怎么突然想到鲁迅先生的《阿Q正传》呢?真奇怪。)我们介绍一下安装包的方法。安装工具包的方法有两种,当然是我常用的两种。至于有没有其他方法。自然也有。只是我个人还是比较喜欢这两种。如果哪位有什么比较怪诞的方法自然也可以用。只要能够顺利使用,用什么方法都是可以理解的嘛。所谓条条道路通罗马嘛。有些时候,我们不必过于计较方法,我们要的是结果。第一种方法,就是像我们平时使用安装程序一样。直接双击那个工具包。Package Manager 会很热情的跳出来帮你完成任务的。然后,你就更具提示一步步的走就可以了。这种方法的确很不错。只是觉得用起来不够专业。如果被人看到,会被别人认为是菜鸟的。所以,我这里为大家隆重介绍第二种安装方法。首先你先运行Package Manager 然后点击Install按钮。她会提示你告诉她工具包的位置。只要选择好工具包,点击确定。剩下的就和第一种方法一样了。这种方法看起来会比较老鸟一点。不过太麻烦了。不是么?那么是不是我们要在菜鸟和老鸟种做选择呢?当然不用。我个人意见是,平时就用第一种方法。有人请教什么的,就用第二种方法。好了,安装好以后。我们会看到Package Manager中会多一个图标。这个就是你刚才安装的工具包。如果觉得用起来不爽就选中她然后按Remove就可以了。下面你可能会问我,我安装完了。改如何用呢?问的好,值得表扬。这个问题嘛……当然是很简单的啦。要是连这个也不能回答我怎么能在这里说,你在那里听呢?(诶,原本想早点说完回家睡觉的……)对于不同的开发包,使用的方法会有所不同。如果是IDE自身的开发包。那么,你在使用IDE的时候IDE会在运行时调用的。就不用你操心了。要知道,一个人操心太多会多很多皱纹和死很多脑细胞的。而一些开发工具就可以在新建工程中看到,至于具体在哪里要看具体的包而定。 接下来我还是以Fast Light Toolkit为例。来说明包的使用方法。Fast Light Toolkit是一个GUI开发包。(我想你该知道什么是GUI吧,说的简单一点就是Graphical User Interface。说得复杂一点,就是用户界面)好了。我们现在开始新建一个工程,这个在上文中已经介绍过了。不过这次在确定项目的时候有些改变。这次,我们在点击新建工程后出现的对话框中,选择GUI选项卡。然后选择FLTK。因为FLTK是用于C++的。所以,我们这里只能用C++而C是不可选状态的(怎么有硬来的感觉)。接下来的一切和上次我们说好的一样了。Dev会自动生成一个main.cpp的文件。里面有一些基本的代码。保存后编译,运行。可以看到一个你仰慕以旧的Windows界面。(啊,终于看到你了,窗口)我想,那么聪明的你应该会举一反三,知道其他的工具包如何使用吧。所谓,师父领进门,修行靠自身。我也不可能一步到位啊。最后,我想请你们注意一下。在安装包之前,先要看清楚有关包的说明。因为有些包是有依赖关系的,必须在安装某个包之后再安装她。这就像,要知道有些时候同样的结果是不能将操作的顺序颠倒一样。比如,你必须先有个妻子,然后才有个儿子。(除非特殊情况)
第四章 工程的导入与导出
四这个数字总是不太吉利。在中国是这样,在国外好像也这样吧。既然我们不能跳过四,直接到五(因为那样,别人会认为是不是自己漏看一章而觉得遗憾终生的)所以,我就在这章介绍一些无关痛痒的东西。就算不吉利也不会影响到我们开发的。对于用惯VC开发的人。有许多项目在Dev下开发还要重新在设置和编写,会觉得很头痛。所以,Dev就在她的里面加了一项将VC6.0的工程文件转换成 Dev的工程文件的功能。(这句话好绕口啊,下次把它改成绕口令算了)是个好消息吧。首先,我们必须有一个VC6.0的工程做测试。没有也没有关系,看看长长见识也不错。反正这章讲的是不关痛痒的内容。接着,我们开始导入了。选择文件,导入,导入Visual C++ Project。点击后,会出现一个对话框。在第一个选项选择*.dsp的路径(填入也可以,只要你能把完整路径写出来)。选择完毕后。对话框就会出现有关该项目的一些属性。你只要选择就可以了。比如,第二个框内的内容就是问你是导入那种生成配置。Debug或者Release还是其他什么的。第三个框内问的是你要将Dev的项目文件放在哪里。(当然是在你自己的计算机上,还有哪里?难道让勇气号带到火星上不成?)全部选择好以后就可以了按确定了。在等待一段时间后(具体长短,要看你的程序体积如何,如果像VC编写的Linux Kernel。那么是要等一段比较长的时间。如果有的话)。现在开启Dev项目看看。怎么样,一切正常吧。是不是很兴奋?或许有人要问,这么重要的功能为什么说是无关痛痒的功能呢?其实,更具我使用下来的情况。导入的代码能够成功编译的,算是你幸运的要准备去买六合彩了。因为,直到现在我还没有导入过一个可以成功编译的项目。(如果你可以,记得一定要告诉我,好让我见识一下传说中的可导入工程)。下一个功能是导出。这个功能当然不像上一个功能那么那样。不过,功能对于一般的开发者不会有太大的用处。你可别以为这个导出和上面的导入是相对的。就是把 Dev工程导出成VC6.0工程。这个导出,是讲C/C++的文件工程导出成网页形式。或者写字板形式的。如果你是像用这个工程做教程的确实是一个很不错的功能。不过,开发者还是编写代码大于写教程吧(好像我是个不务正业的开发者)。所以,我认为这个功能是有些无关痛痒。下面介绍一下使用方法。选择文件,导出后,会有三个选项。到HTML,到RTF和工程到HTML。第一个和第二个是对单个文件进行导出。而第三个是对整个工程进行导出。(就是所有的代码)第一,第二个的导出文件我也不用介绍了。反正也就那么一个文件。我具体的介绍一下第三个所生成的文件。第三个生成了一个*.html,*的内容是由你决定的。和一个名位code的文件夹。里面包含了转成html文件的程序代码。当然,这些代码都是有色彩提示的,很不错。这样看来,所谓的导出工程,其实就是将整个工程文件转换成一个类似于网站树型结构的功能。所以说,这个功能用于说明代码是很不错的。好了介绍到这里,介绍了一些无关痛痒的功能。我想,你们也许也对Dev-Cpp有一个大概的了解了吧。如果,你想知道更多的关于导入和导出的功能的介绍。可以提出来。大家一起来解决嘛。
文外音:
文章就暂时介绍到这里,以后还会继续介绍。有关Dev-Cpp/Mingw32更多的内容以后会一一为各位展示。敬请期待。觉得这次的文章,好像没有上次那么有含金量,而且写作风格也有所改变。如果你喜欢这种风格我以后会多运用,如果不喜欢请你说出喜欢那种风格的。我会作为参考的。另外,还希望各位多多指教。我的格言:不论是程序还是思想,唯有通过不断的交流才能愈加完善。
STUDIO软件开发组
北斗星君(黄庠魁)
Dev-Cpp/Mingw32 环境介绍(3)
上文回顾:
上文《Dev-Cpp/Mingw32 环境介绍(2)》向各位介绍了一些有关Dev-Cpp的功能,其中有包的安装和一些小功能。希望能得到你的满意。这次,我们就继续介绍Dev-Cpp的其他功能。其实,说句实话。对于GNU的东西,我个人觉得还是提示符下用的舒服。我也不知道为什么。有很多功能,在提示符下很简单的打几个字符,可以完成像 Windows的IDE需要点很多鼠标才能完成的功能。我说这个并不是没有道理的空穴来风。本次我将为你展现我这一观点。
第五章 在Dev-Cpp下的程序调试
对于任何程序员来说,程序的调试是再需要不过了。如果没有程序调试,那么程序的稳定又从何说起呢?现在我们就来看看如何使用Dev来调试我们亲爱的程序吧。众所周知,GNU有一个非常棒的调试程序GDB,可是由于常常使用VC。所以,对于这个许多人都有所而闻而未目睹这一程序的芳容。现在我们就来掀开他的盖头来。首先,我们超常,启动Dev-Cpp这次我们要做的是在Dev-Cpp下调试程序。在Dev-Cpp下,调试程序并不像在VC下那样有专门的程序界面来做。他的调试界面就在代码框的下面。只要选择下面的 调试 选项卡就可以看到调试界面了。在各位看到调试界面后,会不会有一种凄凉的感觉?其实我已经凄凉了好几年了。大家也就将就一下了。其中调试选项卡中还有三个选项。调试,回溯,输出。其中,调试就是将一些调试的命令做成按钮,方便各位操作。不过我个人觉得这个功能说方便也不方便。因为有些时候就是很简单的一个操作也会让使用的人手忙脚乱的。回溯,是将GDB调会的有关函数的信息显示出来,这个功能还不错。输出,是将用户的GDB命令直接输出给GDB程序,没有按钮了,不过这个界面有个不太好的地方,就是显示GDB返回信息的窗口太小了。有种管中窥豹的感觉,很不舒服。话说那么多,觉得有些罗嗦。各位是不是手痒痒了?(该不是小儿多动症吧?)现在随便开启一个程序,最好是代码行数多点的,参数多点的,函数多点的,提示符界面的程序。因为,这个可以帮助你们了解基本的运行机制嘛。点击调试窗口的调试按钮,如果你的程序没有调试信息,那么Dev会提示你是否重新编译程序加入调试信息。选择是。然后程序将使用Debug方式重新编译连接程序。在完成之后。我们就开看看自己的程序吧。首先,我们先要运行GDB。在次点击调试,或者将编辑区的光标移动到你要运行到的位置点击运行到光标。然后,程序就开始运行了。其中,你会看到在编辑区中有一个蓝色的条子。这个就指示你该程序运行到何处了。如果你愿意,可以继续向下运行一行。你只要点击下一步就可以完成。对于其他有关GDB的操作,比如代码的查看,变量的查看,函数的信息等等,只有通过输出来完成了。选择输出,然后在输出中的字符输入框中输入你的GDB命令。比如:list 这个命令将在下面的字符框中列出程序的代码。当然,你要上下找找,因为框太小,看起来很麻烦。好了,有关IDE中的调试,本人就介绍到这里。在深入的东西,当然也没有深入的东西了。再深入的话,怕我没有累死,大家可要看着烦死了。其实上面介绍的一些操作如果再提示符下很容易就Ok了。更本不需要那么复杂。我想,可能这也是Dev不能流行的一个主要原因吧。因为界面的操作太不人性化了。
第六章 在提示符下的程序调试
上一章中,我们领略了Dev-Cpp下的调试。真是让人有些不感恭维。接下来我们来欣赏一下标准,经典的GDB调试。如果各位对Linux等系统有所了解的话,应该知道提示符是许多经典软件的常用界面。所以,要使用一些经典的东西,看来还是要在提示符下多熟悉熟悉了。当然,这里的提示符并不像各位想的那么麻烦,要有上百条命令要记忆。其实,像GDB这样的程序,基本就是一个很简单的命令就可以解决了。而且非常灵活。 接下来我就来介绍一个GDB的调试。首先我们必须要一个可以调试的代码。现在我们用gcc main.c -o main -g来生成可调试的代码。然后用gdb main 来启动gdb。是不是没有想象的那么复杂啊?如果顺利您会看到一段GDB的版权信息,接着是(GDB)这样一个提示符。现在您就可以对GDB下命令了。看看程序代码。如果,我们想看看调试程序的源代码而又不想开启main.c这个文件(更多的原因是要为后面设置断点等来做铺垫)。那么我们可以输入 list或者,l就可以查看程序代码了。是不是啊?看来提示符并没有像我们想象的那么可怕。运行程序代码。虽然调试是可以那么我们该如何在调试的时候运行代码呢?很简单。输入run或者r就可以运行了。如果前面设置过断点,那么使用这个命令可以让程序运行到断点。 为调试设置断点。使用break可以设置断点,让调试程序在断点停止运行的程序。break 后面必须有一个参数。参数可以是行号。如,break 10 就是在第10行设置断点。也可以是函数名称break main就是在main函数处设置断点。查看程序变量。如果您像查看程序中的变量,可以用paint或者p命令来实现。这两个命令后必须加上变量名称。如 p argc就是显示argc的值。而使用info命令可以查看相关的信息,如内存位置什么的。一步步运行程序。如果您像在断点后一步步的执行程序,可以用n或者next命令来执行下一行代码。 退出调试。输入q退出程序。
是不是觉得提示符下的调试要比IDE中的简单?你不要以为这就是GDB的全部功能。我在这里只是为各位展示一下GDB。如果各位要了解更多的关于GDB的使用方法。可以查看技术手册或者到网上寻找相关的文章,可以找到很多。 最后,如果对于GDB和调试程序有什么疑问,我们可以一起探讨。
文外音:
这次的文章好像很短,我也觉得。但是,没有办法。所谓众口难调。这一章总是要讲的。干脆提早一些写好。下一篇我们将进入项目的建立和静态库的使用。我想一定会让你感到兴奋的。最后,希望你能够多多指教。我的格言:不论是思想还是程序,唯有通过不断的交流才能愈加完善。
STUDIO软件开发组
2009年3月12日星期四
QT
Qt uses C++ with several non-standard extensions implemented by an additional pre-processor that generates standard C++ code before compilation. Qt can also be used in several other programming languages; bindings exist for Ada (QtAda),[3] C# (Qyoto/Kimono), Java (Qt Jambi),[4] Pascal, Perl (Perl Qt4),[5] PHP (PHP-Qt), Ruby (QtRuby), and Python (PyQt). It runs on all major platforms, and has extensive internationalization support. Non-GUI features include SQL database access, XML parsing, thread management, network support and a unified cross-platform API for file handling.
2008年1月15日星期二
inux快捷键
在控制台/虚拟终端下
1. Ctrl-Alt-Delete -关闭计算机
2. Alt-Fn (F1, F2, F3,…) - 切换到第n个控制台
3. Alt-Left 或者 Alt-Right - 切换到上/下一个虚拟终端
4. Scroll Lock - 锁定终端的输入/输出-当屏幕输出滚动过快的时候可以用这个键给屏幕定格,再按一次Scroll Lock解除锁定。
也可以用另外一种方法实现这个功能,使用Ctrl-S 锁定屏幕,使用Ctrl-Q解除锁定。如果你的控制台突然出现了不明原因无响应也可以尝试一下后面的这个解锁快捷键,也许是因为你无意中触发了CTRL-S导致屏幕假死。
5. Shift-Page Up 或者 Shift-Page Down - 上、下滚动控制台缓存。这个功能在 Scroll Lock 启动的时候也是管用的。 在使用 (Alt-Fn) 更换控制台后缓存内容就被删除了,所以滚动无效。
6. Ctrl-L -刷新屏幕。
7. Ctrl-C 或者 Ctrl-\ -杀死当前任务
8. Ctrl-D - 作用是 EOF 即文件末尾(End-of-file)。如果你的光标处在一个空白的命令行上,将会退出bash,比你用exit命令退出要快得多。
9. Ctrl-Z - 暂停进程。使用命令:bg在后台运行或者使用fg在前端运行。
Bash & command-line
1. Ctrl-A - 把光标移动到命令行最开始的地方。
2. Ctrl-E - 把光标移动到命令行末尾。
3. Ctrl-U - 清除命令行中光标所处位置之前的所有字符。
4. Ctrl-W - 清除左边的字段
5. Ctrl-Y - 将会贴上被Ctrl-U 或者 Ctrl-K 或者 Ctrl-W清除的部分。
6. Ctrl-R - 将自动在命令历史缓存中增量搜索后面入的字符。
7. Tab - 命令行自动补全-自动补全当前的命令行。如果启用自动补全脚本命令参数和选项也可以自动补齐。
8. Ctrl-K - 清除从提示符所在位置到行末尾之间的字符。
Kernel shortcuts
下面的快捷键必须在内核中启用以后才可以使用。
而且必须启用魔术组合键(SysRQ):
启用SysRq:
$sudo echo 1 > /proc/sys/kernel/sysrq
禁用SysRq:
$sudo echo 0 > /proc/sys/kernel/sysrq
1. Alt-SysRQ-S - 同步所有已挂载的文件系统。所有缓存中的数据将被立刻写入磁盘。
2. Alt-SysRQ-U - 以只读方式重新挂载所有已挂载文件系统。
3. Alt-SysRQ-B - 快速重起。 不要在没有同步和卸载文件系统的情况下执行,否则会导致文件系统严重错误。
4. Alt-SysRQ-S,然后 Alt-SysRQ-U,然后 Alt-SysRQ-B - 同步所有文件系统、以只读方式重新挂载所有文件系统、立刻重新启动。这是重新启动Linux的最快方式。
5. Alt-SysRQ-H - 输出其他魔术组合键列表(SysRQ)功能。
X-Window快捷键
1. Ctrl-Alt-"+" 或者 Ctrl-Alt-"-"- 改变屏幕分辨率(提高/降低)。前提是在X-Window server配置文件中写入了多种可用分辨率。
2. Ctrl-Alt-Backspace - 杀死X-server,返回登录界面。所有正在运行的应用程序将被终止。
3. Ctrl-Alt-Escape - xkill - 点击一个应用程序强制关闭。
4. Ctrl-Shift-Num Lock 把键盘上的小键盘(数字键盘)变成鼠标,启动后你可以用小键盘进行鼠标操作。数字键盘上的/和 * 分别代表鼠标左键和鼠标右键,数字键盘上的 5是双击。(这个地方翻译的不确定,大家可以参考一下原文。我用的笔记本没办法测试这个功能。)
5. Ctrl-Alt-Fn (F1, F2, F3,…) - 切换到第 n 个文本控制台。一般Alt+F7切换回X-window。
6. Alt-F2 - 开启一个运行命令的小窗口。如果输入的是可执行命令则直接运行;如果输入的是文件名系统将调用适当的应用程序打开它;输入网址将用默认的浏览器打开它。
KDE 快捷键
1. Ctrl-Alt-Shift-Page Down - 直接关机
2. Ctrl-Alt-Shift-Page Up - 直接重启
FAT12文件系统基本格式(1.44M软盘)
FAT12是DOS时代就开始使用的文件系统,目前软盘上也一直在用。
引导扇区是软盘的第0个扇区,在这个扇区中有一个很重要的数据结构叫BPB(BIOS Parameter Block),下面是引导扇区格式,其中BPB_开头的属于BPB,以BS_开头的只是BOOT Sector的一部分,不属于BPB。
名称 开始字节 长度 内容 参考值
BS_jmpBOOT 0 3 一个短跳转指令 jmp Label_07c00H
nop
BS_OEMName 3 8 厂商名 'QingFeng'
BPB_BytesPerSec 11 2 每扇区字节数(Bytes/Sector) 0x200
BPB_SecPerClus 13 1 每簇扇区数(Sector/Cluster) 0x1
BPB_ResvdSecCnt 14 2 Boot记录占用多少扇区 ox1
BPB_NumFATs 16 1 共有多少FAT表 0x2
BPB_RootEntCnt 17 2 根目录区文件最大数 0xE0
BPB_TotSec16 19 2 扇区总数 0xB40[2*80*18]
BPB_Media 21 1 介质描述符 0xF0
BPB_FATSz16 22 2 每个FAT表所占扇区数 0x9
BPB_SecPerTrk 24 2 每磁道扇区数(Sector/track) 0x12
BPB_NumHeads 26 2 磁头数(面数) 0x2
BPB_HiddSec 28 4 隐藏扇区数 0
BPB_TotSec32 32 4 如果BPB_TotSec16=0,则由这里给出扇区数 0
BS_DrvNum 36 1 INT 13H的驱动器号 0
BS_Reserved1 37 1 保留,未使用 0
BS_BootSig 38 1 扩展引导标记(29h) 0x29
BS_VolID 39 4 卷序列号 0
BS_VolLab 43 11 卷标 'QingFeng'
BS_FileSysType 54 8 文件系统类型 'FAT12'
引导代码及其他内容 62 448 引导代码及其他数据 引导代码(剩余空间用0填充)
结束标志0xAA55 510 2 第510字节为0x55,第511字节为0xAA 0xAA55
紧接着引导扇区的是两个完全相同的FAT表,每个占用BPB_FATSz16(0x9)个扇区;
第二个FAT之后就是根目录区的第一个扇区,根目录区后面是数据区。
根目录区的位置:引导扇区占1个Sec,两个FAT表共18Sec,所以根目录区开始扇区号为19。
根目录区中由若干个目录入口(Directory Entry)组成,最多有BPB_RootEntCnt个,所以根目录区大小不固定。
每个Directory Entry占32字节。
饿死我了,下楼吃饭,回来 GO ON ....
王旭华 QingFeng Studio 科技创造自由 清风创造和谐
顶部
王旭华 (华子)
管理员
Rank: 9Rank: 9Rank: 9
UID 3
精华 0
积分 0
帖子 53
阅读权限 200
注册 2007-5-29
状态 离线
#2
使用道具
发表于 2007-10-6 10:55 资料 个人空间 主页 短消息 加为好友 QQ
一、基本数据分布
|--------------------| 2879扇区
| 数据区(长度不固定) |
|--------------------|-------
| 根目录区(长度不固定,需计算) |
| |19 扇区
|--------------------|-------
| | 18扇区
| FAT2 |
| |10扇区
|--------------------|-------
| | 9 扇区
| FAT1 |
| |1扇区
|--------------------|-------
| 引导扇区 |
|--------------------| 0扇区
可以看出,FAT1和FAT2紧紧接着引导扇区,每个FAT占9扇区,根目录又紧随其后,从第19扇区开始,但根目录区的大小则不固定,依赖于Directory Entry的数目,最多有BPB_RootEntCnt个。
每个Directory Entry占32字节,其结构如下:
名称 开始字节 长度 内容
DIR_Name 0 0xB 文件名8字节,扩展名3字节
DIR_Attr 0xB 1 文件属性
保留位 0xC 10 保留
DIR_WrtTime 0x16 2 最后一次写入的时间
DIR_WrtDate 0x18 2 最后一次写入的日期
DIR_FstClus 0x1A 2 此文件在数据区和FAT表中的开始簇号
DIR_FileSize 0x1C 4 文件大小
DIR_FstClus:对应了文件的第一个簇号,但需要注意的是:数据区的开始簇号是2,不是0和1,
为此,FAT中的前两个FAT项(0项和1项)不被使用,从第2个FAT项开始有效。
每个FAT项(FATEntry)长度位12Bit,即一个半字节,FAT表中每3个字节存放了2个FATEntry。
3 Bytes:
||||||||||字节3||||||||| |||||||||FATEntry2||||
||||||||||字节2||||||||| => |||||||||||||||||||||||||||||||| => |||||||FATEntry1||||||||||||||||||||||||||||||||||||||||||||FATEntry2||||
||||||||||字节1||||||||| |||||||FATEntry1||||||
FATEntry代表文件的下一个簇号,但如果其值大于等于0xFF8,则表示当前簇是文件的最后一个簇;
如果是0xFF7,则表示这是一个坏簇。
上面已经提到,FAT中第一个有效的FATEntry是2号,对应了数据区的开始簇号。
------------------------------
可以这样理解:FATEntry就是数据区对应簇的next字段,它使一个文件以链表结构存放在数据区各个不连续的簇中,而把"索引"放在FAT中。
FAT16 文件系统
The boot sector
A boot sector can be found in the first sector of every logical disk. On a floppy disk, the logical disk takes up all of the physical disk and the boot sector lives in the first physical sector. On a hard disk, a boot sector lives at the start of each partition.
An example boot sec
0000 EB 3E 90 4D 53 57 49 4E-34 2E 30 00 02 20 01 00 .>.MSWIN4.0.. ..
0010 02 40 03 00 00 F8 FF 00-3F 00 40 00 3F 00 00 00 .@......?.@.?...
0020 41 DE 1F 00 80 00 29 37-4B 84 32 46 55 4A 49 54 A…..)7K.2FUJIT
0030 53 55 31 32 32 34 46 41-54 31 36 20 20 20 F1 7D SU1224FAT16 .}
0040 FA 33 C9 8E D1 BC FC 7B-16 07 BD 78 00 C5 76 00 .3…..{…x..v.
0050 1E 56 16 55 BF 22 05 89-7E 00 89 4E 02 B1 0B FC .V.U."..~..N….
0060 F3 A4 06 1F BD 00 7C C6-45 FE 0F 8B 46 18 88 45 ……|.E…F..E
0070 F9 FB 38 66 24 7C 04 CD-13 72 3C 8A 46 10 98 F7 ..8f$|…r<.F…
0080 66 16 03 46 1C 13 56 1E-03 46 0E 13 D1 50 52 89 f..F..V..F…PR.
0090 46 FC 89 56 FE B8 20 00-8B 76 11 F7 E6 8B 5E 0B F..V.. ..v….^.
00A0 03 C3 48 F7 F3 01 46 FC-11 4E FE 5A 58 BB 00 07 ..H…F..N.ZX…
00B0 8B FB B1 01 E8 94 00 72-47 38 2D 74 19 B1 0B 56 …….rG8-t…V
00C0 8B 76 3E F3 A6 5E 74 4A-4E 74 0B 03 F9 83 C7 15 .v>..^tJNt……
00D0 3B FB 72 E5 EB D7 2B C9-B8 D8 7D 87 46 3E 3C D8 ;.r…+…}.F><.
00E0 75 99 BE 80 7D AC 98 03-F0 AC 84 C0 74 17 3C FF u…}…….t.<.
00F0 74 09 B4 0E BB 07 00 CD-10 EB EE BE 83 7D EB E5 t…………}..
0100 BE 81 7D EB E0 33 C0 CD-16 5E 1F 8F 04 8F 44 02 ..}..3…^….D.
0110 CD 19 BE 82 7D 8B 7D 0F-83 FF 02 72 C8 8B C7 48 ….}.}….r…H
0120 48 8A 4E 0D F7 E1 03 46-FC 13 56 FE BB 00 07 53 H.N….F..V….S
0130 B1 04 E8 16 00 5B 72 C8-81 3F 4D 5A 75 A7 81 BF …..[r..?Mzu…
0140 00 02 42 4A 75 9F EA 00-02 70 00 50 52 51 91 92 ..Bju….p.PRQ..
0150 33 D2 F7 76 18 91 F7 76-18 42 87 CA F7 76 1A 8A 3..v…v.B…v..
0160 F2 8A 56 24 8A E8 D0 CC-D0 CC 0A CC B8 01 02 CD ..V$............
0170 13 59 5A 58 72 09 40 75-01 42 03 5E 0B E2 CC C3 .YZXr.@u.B.^….
0180 03 18 01 27 0D 0A 49 6E-76 61 6C 69 64 20 73 79 …'..Invalid sy
0190 73 74 65 6D 20 64 69 73-6B FF 0D 0A 44 69 73 6B stem disk…Disk
01A0 20 49 2F 4F 20 65 72 72-6F 72 FF 0D 0A 52 65 70 I/O error…Rep
01B0 6C 61 63 65 20 74 68 65-20 64 69 73 6B 2C 20 61 lace the disk, a
01C0 6E 64 20 74 68 65 6E 20-70 72 65 73 73 20 61 6E nd then press an
01D0 79 20 6B 65 79 0D 0A 00-49 4F 20 20 20 20 20 20 y key…IO
01E0 53 59 53 4D 53 44 4F 53-20 20 20 53 59 53 80 01 SYSMSDOS SYS..
01F0 00 57 49 4E 42 4F 4F 54-20 53 59 53 00 00 55 AA .WINBOOT SYS..U.
Structure of the boot sector
offset size meaning
00 3 jumpinstruction
03 8 system name
0b 33 BIOS parameter block
3e c0 bootstrap code
fe 2 sector signature
Structure of the BIOS paramter block (BPB)
offset length meaning
00 0x2 logical bytes per sector
02 0x1 sectors per cluster
03 0x2 number of reserved sectors starting from 0
05 0x1 number of FATs
06 0x2 number of root dir entries
08 0x2 total sectors. 0 if ofs 15h used
0a 0x1 media descriptor
0b 0x2 number of sectors per FAT
0d 0x2 number of logical sectors per track
0f 0x2 number of logical heads
11 0x4 number of hidden sectors
15 0x4 total sectors
19 0x1 physical drive number
1a 0x1 reserved
1b 0x1 signature byte for extended boot record
1c 0x4 serial number
20 0xb label
2b 0x8 FAT type
Values for the example boot sector
offset length meaning
00 0x2 logical bytes per sector
02 0x1 sectors per cluster
03 0x2 number of reserved sectors starting from 0
05 0x1 number of FATs
06 0x2 number of root dir entries
08 0x2 total sectors. 0 if ofs 15h used
0a 0x1 media descriptor
0b 0x2 number of sectors per FAT
0d 0x2 number of logical sectors per track
0f 0x2 number of logical heads
11 0x4 number of hidden sectors
15 0x4 total sectors
19 0x1 physical drive number
1a 0x1 reserved
1b 0x1 signature byte for extended boot record
1c 0x4 serial number
20 0xb label
2b 0x8 FAT type
Check the C source code to define the FAT boot sector.
Structure of a FAT disk
disk address length contents
0 1 MBR
1 PhysSectPerTrck - 1 Undefined
PhysSectPerTrck 1 Boot sector
PhysSectPerTrck+1 NumFATs*NumSectPerFAT FATs
BookKeep-SectRootDir SectRootDir Root directory
BookKeep LogcDiskSize-BookKeep Data space
SectRootDir = RootDirSize / 16
BookKeep = PhysSectPerTrck + 1 + NumFATs * NumSectPerFAT + SectRootDir
FAT
The FAT is an array of up to 65,536 16-bit unsigned integers. The first 2 and last 16 entries in the FAT are reserved. All other elements are of type: index into the FAT array. Each of the non-reserved FAT entries correspond to a cluster on the disk.
FAT index Meaning as index Meaning as value
0x0000 reserved cluster is available
0x0001 reserved undefined
0x0002-0xffef data cluster next cluster in chain is at this index
0xfff0-0xfff6 reserved undefined
0xfff7 reserved bad cluster
0xfff8-0xffff reserved end of the current cluster chain
FAT entries 0x0000 and 0x0001 contain other information, usually 0xfff8 and 0xffff respectively.
The fragment below is from the start of a FAT
FFF8 FFFF 0000 0004 FFFF 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
The fragment above shows a file using clusters 0x0003 & 0x0004.
Folders
A folder is a data structure stored on the disk. The root folder is stored before the data area. Other folders are stored in the data area in the same way as files; These folders may grow in size, shrink in size and be stored non-contiguously in the same way as files. The structure of all folders is as an array of folder entries. The end of the folder is marked by a folder entry starting with a 00h byte.
Folder entry structure
offset length contents
0x00 0x8 name
0x08 0x3 extension
0x0b 0x1 flags
0x0c 0xa reserved
0x16 0x2 time
0x18 0x2 date
0x1a 0x2 first cluter
0x1c 0x4 size
The date field is in DOS date format, and the time field is in DOS time.
FAT16文件系统格式详细说明
2005年6月18日 作者: 发布人:专业嵌入式网站 本文已被浏览 738 次
FAT16文件系统格式详细说明
来源:嵌入式系统 作者:novar
 FAT16文件系统格式说明
硬盘上的数据按照其不同的特点和作用大致可分为5部分:MBR区、DBR区、FAT区、DIR区和DATA区。我们来分别介绍一下:
(1)MBR区(主引导扇区)
MBR (Main Boot Record),按其字面上的理解即为主引导记录区,位于整个硬盘的0磁道0柱面1扇区。不过,在总共512字节的主引导扇区中,MBR只占用了其中的446个字节(偏移0--偏移1BDH),另外的64个字节(偏移1BEH--偏移1FDH)交给了DPT(Disk Partition Table硬盘分区表)(见下表),最后两个字节"55,AA"(偏移 1FEH- 偏移1FFH)是分区的结束标志。这个整体构成了硬盘的主引导扇区。
主引导记录中包含了硬盘的一系列参数和一段引导程序。其中的硬盘引导程序的主要作用是检查分区表是否正确并且在系统硬件完成自检以后引导具有激活标志的分区上的操作系统,并将控制权交给启动程序。MBR是由分区程序(如Fdisk.com)所产生的,它不依赖任何操作系统,而且硬盘引导程序也是可以改变的,从而实现多系统共存。
偏移 长度 所表达的意义
0 字节 分区状态:如0-->非活动分区
 80--> 活动分区
1 字节 该分区起始头(HEAD)
2 字 该分区起始扇区和起始柱面
4 字节 该分区类型:如82--> Linux Native分区
83--> Linux Swap 分区
5 字节 该分区终止头(HEAD)
6 字 该分区终止扇区和终止柱面
8 双字 该分区起始绝对分区
C 双字 该分区扇区数
下面,我们以一个实例让大家更直观地来了解主引导记录:
例: 80 01 01 00 0B FE BF FC 3F 00 00 00 7E 86 BB 00
在这里我们可以看到,最前面的"80"是一个分区的激活标志,表示系统可引导;"01 01 00"表示分区开始的磁头号为01,开始的扇区号为01,开始的柱面号为00;"0B"表示分区的系统类型是FAT32,其他比较常用的有04(FAT16)、07(NTFS); "FE BF FC"表示分区结束的磁头号为254,分区结束的扇区号为63、分区结束的柱面号为764; "3F 00 00 00"表示首扇区的相对扇区号为63;"7E 86& nbspBB 00"表示总扇区数为12289622。
(2)DBR区
DBR(Dos& nbspBoot Record)是操作系统引导记录区的意思。它通常位于硬盘的0磁道1柱面1扇区,是操作系统可以直接访问的第一个扇区,它包括一个引导程序和一个被称为BPB(Bios Parameter Block)的本分区参数记录表。引导程序的主要任务是当MBR将系统控制权交给它时,判断本分区跟目录前两个文件是不是操作系统的引导文件(以DOS为例,即是Io.sys和 Msdos.sys)。如果确定存在,就把其读入内存,并把控制权 交给该文件。BPB参数块记录着本分区的起始扇区、结束扇区、文件存储格式、硬盘介质描述符、根目录大小、FAT个数,分配单元的大小等重要参数。
(3)FAT区
在DBR之后的是我们比较熟悉的FAT (File Allocation Table文件分配表)区。在解释文件分配表的概念之前,我们先来谈谈簇(cluster)的概念。文件占用磁盘空间时,基本单位不是字节而是簇。簇的大小与磁盘的规格有关,一般情况下,软盘每簇是1个扇区,硬盘每簇的扇区数与硬盘的总容量大小有关,可能是4、8、16、32、64……
通过上文我们已经知道,同一个文件的数据并不一定完整地存放在磁盘的一个连续的区域内,而往往会分成若干段,像一条链子一样存放。这种存储方式称为文件的链式存储。硬盘上的文件常常要进行创建、删除、增长、缩短等操作。这样操作做的越多,盘上的文件就可能被分得越零碎(每段至少是1簇)。但是,由于硬盘上保存着段与段之间的连接信息(即FAT),操作系统在读取文件时,总是能够准确地找到各段的位置并正确读出。不过,这种以簇为单位的存储法也是有其缺陷的。这主要表现在对空间的利用上。每个文件的最后一簇都有可能有未被完全利用的空间(称为尾簇空间)。一般来说,当文件个数比较多时,平均每个文件要浪费半个簇的空间。
好了,我们言归正传,为了实现文件的链式存储,硬盘上必须准确地记录哪些簇已经被文件占用,还必须为每个已经占用的簇指明存储后继内容的下一个簇的簇号,对一个文件的最后一簇,则要指明本簇无后继簇。这些都是由FAT表来保存的,表中有很多表项,每项记录一个簇的信息。
由于FAT对于文件管理的重要性,所以FAT有一个备份,即在原FAT的后面再建一个同样的FAT。初形成的FAT中所有项都标明为"未占用",但如果磁盘有局部损坏,那么格式化程序会检测出损坏的簇,在相应的项中标为"坏簇",以后存文件时就不会再使用这个簇了。FAT的项数与硬盘上的总簇数相当,每一项占用的字节数也要与总簇数相适应,因为其中需要存放簇号。FAT的格式有多种,最为常见和为读者所熟悉的是FAT16和FAT32,其中FAT16是指文件分配表使用16位数字,由于16位分配表最多能管理65536(即2的16次方)个簇,也就是所规定的一个硬盘分区。
由于每个簇的存储空间最大只有32KB,所以在使用FAT16管理硬盘时,每个分区的最大存储容量只有(65536×32 KB)即2048MB,也就是我们常说的2G。现在的硬盘容量是越来越大,由于FAT16对硬盘分区的容量限制,所以当硬盘容量超过2G之后,用户只能将硬盘划分成多个2G的分区后才能正常使用,为此微软公司从Windows 95 OSR2版本开始使用FAT32标准,即使用32位的文件分配表来管理硬盘文件,这样系统就能为文件分配多达4294967296(即2的32次方)个簇,所以在簇同样为32KB时每个分区容量最大可达65G以上。此外使用 FAT32管理硬盘时,每个逻辑盘中的簇长度也比使用FAT16标准管理的同等容量逻辑盘小很多。由于文件存储在硬盘上占用的磁盘空间以簇为最小单位,所以某一文件即使只有几十个字节也必须占用整个簇,因此逻辑盘的簇单位容量越小越能合理利用存储空间。所以FAT32更适于大硬盘。
(4)DIR区(根目录区)
DIR(Directory)是根目录区,紧接着第二FAT表(即备份的FAT表)之后,记录着根目录下每个文件(目录)的起始单元,文件的属性等。定位文件位置时,操作系统根据DIR中的起始单元,结合FAT表就可以知道文件在硬盘中的具体位置和大小了。
(5)数据(DATA)区
数据区是真正意义上的数据存储的地方,位于DIR区之后,占据硬盘上的大部分数据空间。
FW: [嘻嘻哈哈] gcc的编译参数
gcc的一些重要参数
1. -I 指定头文件搜索路径(I 表include)
如 $gcc -c hello.c -o hello.o -I/usr/include
2.-L 指定要连接的库所在的目录
-l 指定要连接的库的名字
如$gcc main.o -L/usr/lib -lqt -o hello
3. -D 定义宏(D-define)
-D定义宏有两种情况,一种是-DMACRO 相当于程序中使用#define MACRO 另外可以-DMACRO=A 相当于程序中使用#define MACRO A 这只是一个编绎参数,在连接时没有意义
如: $gcc -c hello.c -o hello.o -DDEBUG
上面为hello.c定义了一个DEBUG宏,某些情况下使用-D 代替直接在文件中使用#define,也是为了避免修改源代码双。例如一个程序希望在开发调试的时候能打印出调试信息,而正式发布的时候就不用打印了,而且发布前不用修改源代码双。可以这样
#ifdefine DEBUG
printf("debug message\n");
gcc基本的使用方法及常用指令(zt)
前言
编译器在编译过程中,先将程式码编译成 object 档,然後再和程式库联结,成为可执行档。故一个编译器须提供的参数主要有几类:
1.指定编译器编出的object 档或是可执行档档名。
2.在编译过程做最佳化,可提升程式的执行速度。
3.设定搜寻程式库的标头档 (header file) 及程式库档的目录及指定程式库档档名。
提供进一步的资讯以便使用者找寻程式中的错误。
以下便以这四个大类分别介绍。
注意:下面在不同类别中所介绍的参数,几乎都可以混合著使用。
1.设定编译出的 object 档档名或是可执行档档名:
参数: -o out_put_filename
说明: 指定编译出的档名为 out_put_filename。
范例: 本例将程式码 'test.c' 编译成可执行档,并设定档名为 'test'。
gcc test.c -o test
2.在编译过程做最佳化
参数: -O
说明: 在编译过程做最佳化,以提升增快程式执行速度。
范例: 本例将程式码 'test.c' 编译成可执行档 'test',并在编译过程做最佳化'。
gcc -O test.c -o test
3.设定搜寻标头档目录、程式库档的目录及指定程式库档。
3.1设定搜寻标头档目录
参数: -Idir_name
说明: 将目录 'dir_name' 设定为搜寻标头档目录之一。
3.2设定搜寻程式库目录。
参数: -Ldir_name
说明: 将目录 'dir_name' 设定为搜寻程式库目录之一。
3.3设定程式库档案。
参数: -lname
说明: 联结程式库 libname.a 。
范例一:本例中假设你的程式档名为test.c,数学函数如 sin等,所要联结的程式库为 libm.a。
gcc -I/usr/X11R6/include -L/usr/X11R6/lib -lX11 test.c -o test
范例二:本例中假设你的程式档名为 test.c,使用到 X window 函数,所需的 include 档放在 /usr/X11R6/include 中,所须联结的程式库放在 /usr/X11R6/lib,所要联结的程式库为 libX11.a。
gcc -I/usr/X11R6/include -L/usr/X11R6/lib -lX11 test.c -o test
提供进一步的资讯以便使用者找寻程式中的错误。
参数: -Wall
说明: 输出较多的警告讯息,以便找出程式的错误。
范例: 编译 test.c 时输出较多的警告讯息。
gcc -Wall test.c
参数: -g
说明: 在编译出可执行档时,附加执行时除错资讯,以供 gdb 读取 (若要使用 ABSoft 的除错程式,则须将参数改为 -gdwarf )。
范例: 将 'test.c' 编译成可执行档 'test',并附加除错资讯。
gcc -g test.c -o test
进阶参数
1. 仅编译成 object 档。
参数: -c
说明: 仅编译成 object 档而不进行程式库联结。
范例: 将 test.c 编译成 object 档 test.o。
gcc -c test.c -o test.o
2. 联结数个 object 成可执行档。
范例: 将 'test1.o'、'test2.o' 和程式库联结後成为可执行档 test。
gcc test1.o test2.o -o test
3. 观察宏展开情形:
参数: -E
说明:展开程式中的宏以便了解巨集是否依照预期方式展开。
范例:将 test1.c 中的宏展开後储存到 test1.c.ext 。
gcc -E test1.c > test1.c.ext
4. 产生组合语言程式码:
参数: -S
范例:编译 test.c 产生对应的组合语言程式码档 test.s。
gcc -S test.c -o test.s
GCC(1) GNU Tools GCC(1)
NAME
gcc, g++ - GNU project C and C++ Compiler (v2.7)
SYNOPSIS
gcc [ option | filename ]...
g++ [ option | filename ]...
WARNING
The information in this man page is an extract from the
full documentation of the GNU C compiler, and is limited
to the meaning of the options.
This man page is not kept up to date except when volun-
teers want to maintain it. If you find a discrepancy
between the man page and the software, please check the
Info file, which is the authoritative documentation.
If we find that the things in this man page that are out
of date cause significant confusion or complaints, we will
stop distributing the man page. The alternative, updating
the man page when we update the Info file, is impossible
because the rest of the work of maintaining GNU CC leaves
us no time for that. The GNU project regards man pages as
obsolete and should not let them take time away from other
things.
For complete and current documentation, refer to the Info
file `gcc' or the manual Using and Porting GNU CC (for
version 2.0). Both are made from the Texinfo source file
gcc.texinfo.
DESCRIPTION
The C and C++ compilers are integrated. Both process
input files through one or more of four stages: prepro-
cessing, compilation, assembly, and linking. Source file-
name suffixes identify the source language, but which name
you use for the compiler governs default assumptions:
gcc assumes preprocessed (.i) files are C and assumes C
style linking.
g++ assumes preprocessed (.i) files are C++ and assumes
C++ style linking.
Suffixes of source file names indicate the language and
kind of processing to be done:
.c C source; preprocess, compile, assemble
.C C++ source; preprocess, compile, assemble
.cc C++ source; preprocess, compile, assemble
.cxx C++ source; preprocess, compile, assemble
.m Objective-C source; preprocess, compile, assemble
.i preprocessed C; compile, assemble
.ii preprocessed C++; compile, assemble
GNU Tools 1993/10/13 1
GCC(1) GNU Tools GCC(1)
.s Assembler source; assemble
.S Assembler source; preprocess, assemble
.h Preprocessor file; not usually named on command line
Files with other suffixes are passed to the linker. Com-
mon cases include:
.o Object file
.a Archive file
Linking is always the last stage unless you use one of the
-c, -S, or -E options to avoid it (or unless compilation
errors stop the whole process). For the link stage, all
.o files corresponding to source files, -l libraries,
unrecognized filenames (including named .o object files
and .a archives) are passed to the linker in command-line
order.
OPTIONS
Options must be separate: `-dr' is quite different from
`-d -r '.
Most `-f' and `-W' options have two contrary forms: -fname
and -fno-name (or -Wname and -Wno-name). Only the non-
default forms are shown here.
Here is a summary of all the options, grouped by type.
Explanations are in the following sections.
Overall Options
-c -S -E -o file -pipe -v -x language
Language Options
-ansi -fall-virtual -fcond-mismatch
-fdollars-in-identifiers -fenum-int-equiv
-fexternal-templates -fno-asm -fno-builtin
-fno-strict-prototype -fsigned-bitfields
-fsigned-char -fthis-is-variable
-funsigned-bitfields -funsigned-char
-fwritable-strings -traditional -traditional-cpp
-trigraphs
Warning Options
-fsyntax-only -pedantic -pedantic-errors -w -W
-Wall -Waggregate-return -Wcast-align -Wcast-qual
-Wchar-subscript -Wcomment -Wconversion
-Wenum-clash -Werror -Wformat -Wid-clash-len
-Wimplicit -Winline -Wmissing-prototypes
-Wmissing-declarations -Wnested-externs -Wno-import
-Wparentheses -Wpointer-arith -Wredundant-decls
-Wreturn-type -Wshadow -Wstrict-prototypes -Wswitch
-Wtemplate-debugging -Wtraditional -Wtrigraphs
-Wuninitialized -Wunused -Wwrite-strings
GNU Tools 1993/10/13 2
GCC(1) GNU Tools GCC(1)
Debugging Options
-a -dletters -fpretend-float -g -glevel -gcoff
-gxcoff -gxcoff+ -gdwarf -gdwarf+ -gstabs -gstabs+
-ggdb -p -pg -save-temps -print-file-name=library
-print-libgcc-file-name -print-prog-name=program
Optimization Options
-fcaller-saves -fcse-follow-jumps -fcse-skip-blocks
-fdelayed-branch -felide-constructors
-fexpensive-optimizations -ffast-math -ffloat-store
-fforce-addr -fforce-mem -finline-functions
-fkeep-inline-functions -fmemoize-lookups
-fno-default-inline -fno-defer-pop
-fno-function-cse -fno-inline -fno-peephole
-fomit-frame-pointer -frerun-cse-after-loop
-fschedule-insns -fschedule-insns2
-fstrength-reduce -fthread-jumps -funroll-all-loops
-funroll-loops -O -O2
Preprocessor Options
-Aassertion -C -dD -dM -dN -Dmacro[=defn] -E -H
-idirafter dir -include file -imacros file -iprefix
file -iwithprefix dir -M -MD -MM -MMD -nostdinc -P
-Umacro -undef
Assembler Option
-Wa,option
Linker Options
-llibrary -nostartfiles -nostdlib -static -shared
-symbolic -Xlinker option -Wl,option -u symbol
Directory Options
-Bprefix -Idir -I- -Ldir
Target Options
-b machine -V version
Configuration Dependent Options
M680x0 Options
-m68000 -m68020 -m68020-40 -m68030 -m68040 -m68881
-mbitfield -mc68000 -mc68020 -mfpa -mnobitfield
-mrtd -mshort -msoft-float
VAX Options
-mg -mgnu -munix
SPARC Options
-mepilogue -mfpu -mhard-float -mno-fpu
-mno-epilogue -msoft-float -msparclite -mv8
-msupersparc -mcypress
Convex Options
-margcount -mc1 -mc2 -mnoargcount
GNU Tools 1993/10/13 3
GCC(1) GNU Tools GCC(1)
AMD29K Options
-m29000 -m29050 -mbw -mdw -mkernel-registers
-mlarge -mnbw -mnodw -msmall -mstack-check
-muser-registers
M88K Options
-m88000 -m88100 -m88110 -mbig-pic
-mcheck-zero-division -mhandle-large-shift
-midentify-revision -mno-check-zero-division
-mno-ocs-debug-info -mno-ocs-frame-position
-mno-optimize-arg-area -mno-serialize-volatile
-mno-underscores -mocs-debug-info
-mocs-frame-position -moptimize-arg-area
-mserialize-volatile -mshort-data-num -msvr3 -msvr4
-mtrap-large-shift -muse-div-instruction
-mversion-03.00 -mwarn-passed-structs
RS6000 Options
-mfp-in-toc -mno-fop-in-toc
RT Options
-mcall-lib-mul -mfp-arg-in-fpregs -mfp-arg-in-gregs
-mfull-fp-blocks -mhc-struct-return -min-line-mul
-mminimum-fp-blocks -mnohc-struct-return
MIPS Options
-mcpu=cpu type -mips2 -mips3 -mint64 -mlong64
-mlonglong128 -mmips-as -mgas -mrnames -mno-rnames
-mgpopt -mno-gpopt -mstats -mno-stats -mmemcpy
-mno-memcpy -mno-mips-tfile -mmips-tfile
-msoft-float -mhard-float -mabicalls -mno-abicalls
-mhalf-pic -mno-half-pic -G num -nocpp
i386 Options
-m486 -mno-486 -msoft-float -mno-fp-ret-in-387
HPPA Options
-mpa-risc-1-0 -mpa-risc-1-1 -mkernel -mshared-libs
-mno-shared-libs -mlong-calls -mdisable-fpregs
-mdisable-indexing -mtrailing-colon
i960 Options
-mcpu-type -mnumerics -msoft-float
-mleaf-procedures -mno-leaf-procedures -mtail-call
-mno-tail-call -mcomplex-addr -mno-complex-addr
-mcode-align -mno-code-align -mic-compat
-mic2.0-compat -mic3.0-compat -masm-compat
-mintel-asm -mstrict-align -mno-strict-align
-mold-align -mno-old-align
DEC Alpha Options
-mfp-regs -mno-fp-regs -mno-soft-float -msoft-float
System V Options
GNU Tools 1993/10/13 4
GCC(1) GNU Tools GCC(1)
-G -Qy -Qn -YP,paths -Ym,dir
Code Generation Options
-fcall-saved-reg -fcall-used-reg -ffixed-reg
-finhibit-size-directive -fnonnull-objects
-fno-common -fno-ident -fno-gnu-linker
-fpcc-struct-return -fpic -fPIC -freg-struct-return
-fshared-data -fshort-enums -fshort-double
-fvolatile -fvolatile-global -fverbose-asm
OVERALL OPTIONS
-x language
Specify explicitly the language for the following
input files (rather than choosing a default based
on the file name suffix) . This option applies to
all following input files until the next `-x' op-
tion. Possible values of language are `c',
`objective-c', `c-header', `c++', `cpp-output',
`assembler', and `assembler-with-cpp'.
-x none
Turn off any specification of a language, so that
subsequent files are handled according to their
file name suffixes (as they are if `-x' has not
been used at all).
If you want only some of the four stages (preprocess, com-
pile, assemble, link), you can use `-x' (or filename suf-
fixes) to tell gcc where to start, and one of the options
`-c', `-S', or `-E' to say where gcc is to stop. Note
that some combinations (for example, `-x cpp-output -E')
instruct gcc to do nothing at all.
-c Compile or assemble the source files, but do not
link. The compiler output is an object file corre-
sponding to each source file.
By default, GCC makes the object file name for a
source file by replacing the suffix `.c', `.i',
`.s', etc., with `.o'. Use -o to select another
name.
GCC ignores any unrecognized input files (those
that do not require compilation or assembly) with
the -c option.
-S Stop after the stage of compilation proper; do not
assemble. The output is an assembler code file for
each non-assembler input file specified.
By default, GCC makes the assembler file name for a
source file by replacing the suffix `.c', `.i',
etc., with `.s'. Use -o to select another name.
GNU Tools 1993/10/13 5
GCC(1) GNU Tools GCC(1)
GCC ignores any input files that don't require com-
pilation.
-E Stop after the preprocessing stage; do not run the
compiler proper. The output is preprocessed source
code, which is sent to the standard output.
GCC ignores input files which don't require prepro-
cessing.
-o file
Place output in file file. This applies regardless
to whatever sort of output GCC is producing,
whether it be an executable file, an object file,
an assembler file or preprocessed C code.
Since only one output file can be specified, it
does not make sense to use `-o' when compiling more
than one input file, unless you are producing an
executable file as output.
If you do not specify `-o', the default is to put
an executable file in `a.out', the object file for
`source.suffix' in `source.o', its assembler file
in `source.s', and all preprocessed C source on
standard output.
-v Print (on standard error output) the commands exe-
cuted to run the stages of compilation. Also print
the version number of the compiler driver program
and of the preprocessor and the compiler proper.
-pipe Use pipes rather than temporary files for communi-
cation between the various stages of compilation.
This fails to work on some systems where the assem-
bler cannot read from a pipe; but the GNU assembler
has no trouble.
LANGUAGE OPTIONS
The following options control the dialect of C that the
compiler accepts:
-ansi Support all ANSI standard C programs.
This turns off certain features of GNU C that are
incompatible with ANSI C, such as the asm, inline
and typeof keywords, and predefined macros such as
unix and vax that identify the type of system you
are using. It also enables the undesirable and
rarely used ANSI trigraph feature, and disallows
`$' as part of identifiers.
The alternate keywords __asm__, __extension__,
GNU Tools 1993/10/13 6
GCC(1) GNU Tools GCC(1)
__inline__ and __typeof__ continue to work despite
`-ansi'. You would not want to use them in an ANSI
C program, of course, but it is useful to put them
in header files that might be included in compila-
tions done with `-ansi'. Alternate predefined
macros such as __unix__ and __vax__ are also avail-
able, with or without `-ansi'.
The `-ansi' option does not cause non-ANSI programs
to be rejected gratuitously. For that, `-pedantic'
is required in addition to `-ansi'.
The preprocessor predefines a macro __STRICT_ANSI__
when you use the `-ansi' option. Some header files
may notice this macro and refrain from declaring
certain functions or defining certain macros that
the ANSI standard doesn't call for; this is to
avoid interfering with any programs that might use
these names for other things.
-fno-asm
Do not recognize asm, inline or typeof as a key-
word. These words may then be used as identifiers.
You can use __asm__, __inline__ and __typeof__ in-
stead. `-ansi' implies `-fno-asm'.
-fno-builtin
Don't recognize built-in functions that do not be-
gin with two leading underscores. Currently, the
functions affected include _exit, abort, abs, allo-
ca, cos, exit, fabs, labs, memcmp, memcpy, sin,
sqrt, strcmp, strcpy, and strlen.
The `-ansi' option prevents alloca and _exit from
being builtin functions.
-fno-strict-prototype
Treat a function declaration with no arguments,
such as `int foo ();', as C would treat it--as say-
ing nothing about the number of arguments or their
types (C++ only). Normally, such a declaration in
C++ means that the function foo takes no arguments.
-trigraphs
Support ANSI C trigraphs. The `-ansi' option im-
plies `-trigraphs'.
-traditional
Attempt to support some aspects of traditional C
compilers. For details, see the GNU C Manual; the
duplicate list here has been deleted so that we
won't get complaints when it is out of date.
But one note about C++ programs only (not C).
GNU Tools 1993/10/13 7
GCC(1) GNU Tools GCC(1)
`-traditional' has one additional effect for C++:
assignment to this is permitted. This is the same
as the effect of `-fthis-is-variable'.
-traditional-cpp
Attempt to support some aspects of traditional C
preprocessors. This includes the items that
specifically mention the preprocessor above, but
none of the other effects of `-traditional'.
-fdollars-in-identifiers
Permit the use of `$' in identifiers (C++ only).
You can also use `-fno-dollars-in-identifiers' to
explicitly prohibit use of `$'. (GNU C++ allows
`$' by default on some target systems but not oth-
ers.)
-fenum-int-equiv
Permit implicit conversion of int to enumeration
types (C++ only). Normally GNU C++ allows conver-
sion of enum to int, but not the other way around.
-fexternal-templates
Produce smaller code for template declarations, by
generating only a single copy of each template
function where it is defined (C++ only). To use
this option successfully, you must also mark all
files that use templates with either `#pragma
implementation' (the definition) or `#pragma
interface' (declarations).
When your code is compiled with
`-fexternal-templates', all template instantiations
are external. You must arrange for all necessary
instantiations to appear in the implementation
file; you can do this with a typedef that refer-
ences each instantiation needed. Conversely, when
you compile using the default option
`-fno-external-templates', all template instantia-
tions are explicitly internal.
-fall-virtual
Treat all possible member functions as virtual, im-
plicitly. All member functions (except for con-
structor functions and new or delete member opera-
tors) are treated as virtual functions of the class
where they appear.
This does not mean that all calls to these member
functions will be made through the internal table
of virtual functions. Under some circumstances,
the compiler can determine that a call to a given
virtual function can be made directly; in these
cases the calls are direct in any case.
GCC 编译器使用指南
gcc [ option | filename ]...
g++ [ option | filename ]...
其中 option 为 gcc 使用时的选项(后面会再详述),
而 filename 为欲以 gcc 处理的文件
说明:
这 C 与 C++ 的 compiler 已将产生新程序的相关程序整合起来。产
生一个新的程序需要经过四个阶段:预处理、编译、汇编,连结,
而这两个编译器都能将输入的文件做不同阶段的处理。虽然原始程序
的扩展名可用来分辨编写原始程序码所用的语言,但不同的 compiler
,其预设的处理程序却各不相同:
gcc 预设经由预处理过(扩展名为.i)的文件为 C 语言,并於程
式连结阶段以 C 的连结方式处理。
g++ 预设经由预处理过(扩展名为.i)的文件为 C++ 语言,并於程
序连结阶段以 C++ 的连结方式处理。
原始程序码的扩展名指出所用编写程序所用的语言,以及相对应的处
理方法:
.c C 原始程序 ; 预处理、编译、汇编
.C C++ 原始程序 ; 预处理、编译、汇编
.cc C++ 原始程序 ; 预处理、编译、汇编
.cxx C++ 原始程序 ; 预处理、编译、汇编
.m Objective-C 原始程序 ; 预处理、编译、汇编
.i 已经过预处理之 C 原始程序 ; 编译、汇编
.ii 已经过预处理之 C++ 原始程序 ; 编译、汇编
.s 组合语言原始程序 ; 汇编
.S 组合语言原始程序 ; 预处理、汇编
.h 预处理文件(标头文件) ; (不常出现在指令行)
其他扩展名的文件是由连结程序来处理,通常有:
.o Object file
.a Archive file
除非编译过程出现错误,否则 "连结" 一定是产生一个新程序的最
後阶段。然而你也可以以 -c、-s 或 -E 等选项,将整个过程自四
个阶段中的其中一个停止。在连结阶段,所有与原始码相对应的
.o 文件、程序库、和其他无法自文件名辨明属性的文件(包括不以 .o
为扩展名的 object file 以及扩展名为 .a 的 archive file)都会
交由连结程序来处理(在指令行将那些文件当作连结程序的参数传给
连结程序)。
选项:
不同的选项必须分开来下:例如 `-dr' 这个选项就与 `-d -r' 大
不相同。
绝大部份的 `-f' 及 `-W' 选项都有正反两种形式:-fname 及
-fno-name (或 -Wname 及 -Wno-name)。以下只列出非预设的那个
形式。
以下是所有选项的摘要。以形式来分类。选项的意义将另辟小节说
明。
一般性(概略、常用的)选项
-c -S -E -o file -pipe -v -x language
程序语言选项
-ansi -fall-virtual -fcond-mismatch
-fdollars-in-identifiers -fenum-int-equiv
-fexternal-templates -fno-asm -fno-builtin
-fno-strict-prototype -fsigned-bitfields
-fsigned-char -fthis-is-variable
-funsigned-bitfields -funsigned-char
-fwritable-strings -traditional -traditional-cpp
-trigraphs
编译时的警告选项
-fsyntax-only -pedantic -pedantic-errors -w -W
-Wall -Waggregate-return -Wcast-align -Wcast-qual
-Wchar-subscript -Wcomment -Wconversion
-Wenum-clash -Werror -Wformat -Wid-clash-len
-Wimplicit -Winline -Wmissing-prototypes
-Wmissing-declarations -Wnested-externs -Wno-import
-Wparentheses -Wpointer-arith -Wredundant-decls
-Wreturn-type -Wshadow -Wstrict-prototypes -Wswitch
-Wtemplate-debugging -Wtraditional -Wtrigraphs
-Wuninitialized -Wunused -Wwrite-strings
除错选项
-a -dletters -fpretend-float -g -glevel -gcoff
-gxcoff -gxcoff+ -gdwarf -gdwarf+ -gstabs -gstabs+
-ggdb -p -pg -save-temps -print-file-name=library
-print-libgcc-file-name -print-prog-name=program
最佳化选项
-fcaller-saves -fcse-follow-jumps -fcse-skip-blocks
-fdelayed-branch -felide-constructors
-fexpensive-optimizations -ffast-math -ffloat-store
-fforce-addr -fforce-mem -finline-functions
-fkeep-inline-functions -fmemoize-lookups
-fno-default-inline -fno-defer-pop
-fno-function-cse -fno-inline -fno-peephole
-fomit-frame-pointer -frerun-cse-after-loop
-fschedule-insns -fschedule-insns2
-fstrength-reduce -fthread-jumps -funroll-all-loops
-funroll-loops -O -O2
预处理选项
-Aassertion -C -dD -dM -dN -Dmacro[=defn] -E -H
-idirafter dir -include file -imacros file -iprefix
file -iwithprefix dir -M -MD -MM -MMD -nostdinc -P
-Umacro -undef
汇编程序选项
-Wa,option
连结程序选项
-llibrary -nostartfiles -nostdlib -static -shared
-symbolic -Xlinker option -Wl,option -u symbol
目录选项
-Bprefix -Idir -I- -Ldir
Target Options
-b machine -V version
与机器(平台)相关的选项
M680x0 Options
-m68000 -m68020 -m68020-40 -m68030 -m68040 -m68881
-mbitfield -mc68000 -mc68020 -mfpa -mnobitfield
-mrtd -mshort -msoft-float
VAX Options
-mg -mgnu -munix
SPARC Options
-mepilogue -mfpu -mhard-float -mno-fpu
-mno-epilogue -msoft-float -msparclite -mv8
-msupersparc -mcypress
Convex Options
-margcount -mc1 -mc2 -mnoargcount
AMD29K Options
-m29000 -m29050 -mbw -mdw -mkernel-registers
-mlarge -mnbw -mnodw -msmall -mstack-check
-muser-registers
M88K Options
-m88000 -m88100 -m88110 -mbig-pic
-mcheck-zero-division -mhandle-large-shift
-midentify-revision -mno-check-zero-division
-mno-ocs-debug-info -mno-ocs-frame-position
-mno-optimize-arg-area -mno-serialize-volatile
-mno-underscores -mocs-debug-info
-mocs-frame-position -moptimize-arg-area
-mserialize-volatile -mshort-data-num -msvr3 -msvr4
-mtrap-large-shift -muse-div-instruction
-mversion-03.00 -mwarn-passed-structs
RS6000 Options
-mfp-in-toc -mno-fop-in-toc
RT Options
-mcall-lib-mul -mfp-arg-in-fpregs -mfp-arg-in-gregs
-mfull-fp-blocks -mhc-struct-return -min-line-mul
-mminimum-fp-blocks -mnohc-struct-return
MIPS Options
-mcpu=cpu type -mips2 -mips3 -mint64 -mlong64
-mlonglong128 -mmips-as -mgas -mrnames -mno-rnames
-mgpopt -mno-gpopt -mstats -mno-stats -mmemcpy
-mno-memcpy -mno-mips-tfile -mmips-tfile
-msoft-float -mhard-float -mabicalls -mno-abicalls
-mhalf-pic -mno-half-pic -G num -nocpp
i386 Options
-m486 -mno-486 -msoft-float -mno-fp-ret-in-387
HPPA Options
-mpa-risc-1-0 -mpa-risc-1-1 -mkernel -mshared-libs
-mno-shared-libs -mlong-calls -mdisable-fpregs
-mdisable-indexing -mtrailing-colon
i960 Options
-mcpu-type -mnumerics -msoft-float
-mleaf-procedures -mno-leaf-procedures -mtail-call
-mno-tail-call -mcomplex-addr -mno-complex-addr
-mcode-align -mno-code-align -mic-compat
-mic2.0-compat -mic3.0-compat -masm-compat
-mintel-asm -mstrict-align -mno-strict-align
-mold-align -mno-old-align
DEC Alpha Options
-mfp-regs -mno-fp-regs -mno-soft-float -msoft-float
System V Options
-G -Qy -Qn -YP,paths -Ym,dir
Code Generation Options
-fcall-saved-reg -fcall-used-reg -ffixed-reg
-finhibit-size-directive -fnonnull-objects
-fno-common -fno-ident -fno-gnu-linker
-fpcc-struct-return -fpic -fPIC
-freg-struct-returno -fshared-data -fshort-enums
-fshort-double -fvolatile -fvolatile-global
-fverbose-asm
PRAGMAS
Two `#pragma' directives are supported for GNU C++, to
permit using the same header file for two purposes: as a
definition of interfaces to a given object class, and as
the full definition of the contents of that object class.
#pragma interface
(C++ only.) Use this directive in header files
that define object classes, to save space in most
of the object files that use those classes. Nor-
mally, local copies of certain information (backup
copies of inline member functions, debugging infor-
mation, and the internal tables that implement vir-
tual functions) must be kept in each object file
that includes class definitions. You can use this
pragma to avoid such duplication. When a header
file containing `#pragma interface' is included in
a compilation, this auxiliary information will not
be generated (unless the main input source file it-
self uses `#pragma implementation'). Instead, the
object files will contain references to be resolved
at link time.
#pragma implementation
#pragma implementation "objects.h"
(C++ only.) Use this pragma in a main input file,
when you want full output from included header
files to be generated (and made globally visible).
The included header file, in turn, should use
`#pragma interface'. Backup copies of inline mem-
ber functions, debugging information, and the in-
ternal tables used to implement virtual functions
are all generated in implementation files.
If you use `#pragma implementation' with no argu-
ment, it applies to an include file with the same
basename as your source file; for example, in
`allclass.cc', `#pragma implementation' by itself
is equivalent to `#pragma implementation
"allclass.h"'. Use the string argument if you want
a single implementation file to include code from
multiple header files.
There is no way to split up the contents of a sin-
gle header file into multiple implementation files.
文件说明
file.c C source file
file.h C header (preprocessor) file
file.i 经预处理过的 C source file
file.C C++ source file
file.cc C++ source file
file.cxx C++ source file
file.m Objective-C source file
file.s assembly language file
file.o object file
a.out link edited output
TMPDIR/cc* temporary files
LIBDIR/cpp preprocessor
LIBDIR/cc1 compiler for C
LIBDIR/cc1plus compiler for C++
LIBDIR/collect linker front end needed on some machines
LIBDIR/libgcc.a GCC subroutine library
/lib/crt[01n].o start-up routine
LIBDIR/ccrt0 additional start-up routine for C++
/lib/libc.a standard C library, 参阅 man page intro(3)
/usr/include standard directory for #include files
LIBDIR/include standard gcc directory for #include files
LIBDIR/g++-include additional g++ directory for #include
LIBDIR is usually /usr/local/lib/machine/version.
TMPDIR comes from the environment variable TMPDIR (default
/usr/tmp if available, else /tmp).
2008年1月14日星期一
Linux基本操作命令
首先介绍一个名词"控制台(console)",它就是我们通常见到的使用字符操作界面的人机接口,例如dos。我们说控制台命令,就是指通过字符界面输入的可以操作系统的命令,例如dos命令就是控制台命令。我们现在要了解的是基于Linux操作系统的基本控制台命令。有一点一定要注意,和dos命令不同的是,Linux的命令(也包括文件名等等)对大小写是敏感的,也就是说,如果你输入的命令大小写不对的话,系统是不会做出你期望的响应的。
ls
这个命令就相当于dos下的dir命令一样,肯定是我第一个就要介绍的,这也是Linux控制台命令中最为重要几个命令之一。ls最常用的参数有三个: -a -l -F。
ls -a
Linux上的文件以.开头的文件被系统视为隐藏文件,仅用ls命令是看不到他们的,而用ls -a除了显示 一般文件名外,连隐藏文件也会显示出来。
ls -l(这个参数是字母L的小写,不是数字1)
这个命令可以使用长格式显示文件内容,如果需要察看更详细的文件资料,就要用到ls -l这个指令。例如我在某个目录下键入ls -l可能会显示如下信息(最上面两行是我自己加的):
位置1 2 3 4 5 6 7
文件属性 文件数 拥有者 所属的group 文件大小 建档日期 文件名
drwx------ 2 Guest users 1024 Nov 21 21:05 Mail
-rwx--x--x 1 root root 89080 Nov 7 22:41 tar*
-rwxr-xr-x 1 root bin 5013 Aug 15 9:32 uname*
lrwxrwxrwx 1 root root 4 Nov 24 19:30 zcat->gzip
-rwxr-xr-x 1 root bin 308364 Nov 29 7:43 zsh*
-rwsr-x--- 1 root bin 9853 Aug 15 5:46 su*
下面,我为大家解释一下这些显示内容的意义。
第一个栏位,表示文件的属性。Linux的文件基本上分为三个属性:可读(r),可写(w),可执行(x)。但是这里有十个格子可以添(具体程序实现时,实际上是十个bit位)。第一个小格是特殊表示格,表示目录或连结文件等等,d表示目录,例如drwx------;l表示连结文件,如 lrwxrwxrwx;如果是以一横"-"表示,则表示这是文件。其余剩下的格子就以每3格为一个单位。因为Linux是多用户多任务系统,所以一个文件可能同时被许多人使用,所以我们一定要设好每个文件的权限,其文件的权限位置排列顺序是(以-rwxr-xr-x为例):
rwx(Owner)r-x(Group)r-x(Other)
这个例子表示的权限是:使用者自己可读,可写,可执行;同一组的用户可读,不可写,可执行;其它用户可读,不可写,可执行。另外,有一些程序属性的执行部分不是X,而是S,这表示执行这个程序的使用者,临时可以有和拥有者一样权力的身份来执行该程序。一般出现在系统管理之类的指令或程序,让使用者执行时,拥有root身份。
第二个栏位,表示文件个数。如果是文件的话,那这个数目自然是1了,如果是目录的话,那它的数目就是该目录中的文件个数了。
第三个栏位,表示该文件或目录的拥有者。若使用者目前处于自己的Home,那这一栏大概都是它的账号名称。
第四个栏位,表示所属的组(group)。每一个使用者都可以拥有一个以上的组,不过大部分的使用者应该都只属于一个组,只有当系统管理员希望给予某使用者特殊权限时,才可能会给他另一个组。
第五栏位,表示文件大小。文件大小用byte来表示,而空目录一般都是1024byte,你当然可以用其它参数使文件显示的单位不同,如使用ls �k就是用kb莱显示一个文件的大小单位,不过一般我们还是以byte为主。
第六个栏位,表示创建日期。以"月,日,时间"的格式表示,如Aug 15 5:46表示8月15日早上5:46分。
第七个栏位,表示文件名。我们可以用ls �a显示隐藏的文件名。
ls �F(注意,是大写的F)
使用这个参数表示在文件的后面多添加表示文件类型的符号,例如*表示可执行,/表示目录,@表示连结文件,这都是因为使用了-F这个参数。但是现在基本上所有的Linux发行版本的ls都已经内建了-F参数,也就是说,不用输入这个参数,我们也能看到各种分辨符号。
cd
这个命令是用来进出目录的,它的使用方法和在dos下没什么两样,所以我觉得没什么可说的,但有两点我补充一下。首先,和dos不同的是Linux的目录对大小写是敏感的,如果大小写没拼对,你的cd操作是成功不了的。其次,cd如果直接输入,cd后面不加任何东西,会回到使用者自己的Home Directory。假设如果是root,那就是回到/root.这个功能同cd ~是一样的。
mkdir、rmdir
mkdir命令用来建立新的目录,rmdir用来删除以建立的目录,这两个指令的功能不再多加介绍,他们同dos下的md,rd功能和用法都是基本一样的。
cp
这个命令相当于dos下面的copy命令,具体用法是:cp �r 源文件(source) 目的文件(target)
参数r是指连同元文件中的子目录一同拷贝。熟悉dos的读者用起这个命令来会觉得更方便,毕竟比在dos下面要少敲两下键盘。
rm
这个命令是用来删除文件的,和dos下面的rm(删除一个空目录)是有区别的,大家千万要注意。Rm命令常用的参数有三个: -i,-r,-f。
比如我现在要删除一个名字为text的一个文件:rm �i test
系统会询问我们:"rm:remove 'test'?y",敲了回车以后,这个文件才会真的被删除。之所以要这样做,是因为linux不象dos那样有undelete的命令,或者是可以用 pctool等工具将删除过的文件救回来,linux中删除过的文件是救不回来的,所以使用这个参数在删除前让你再确定一遍,是很有必要的。
rm �r 目录名:这个操作可以连同这个目录下面的子目录都删除,功能上和rmdir相似。
rm �f 文件名(目录名):这个操作可以进行强制删除。
mv
这个命令的功能是移动目录或文件,引申的功能是给目录或文件重命名。它的用法同dos下面的move基本相同,这里不再多讲。当使用该命令来移动目录时,他会连同该目录下面的子目录也一同移走。另外因为linux下面没有rename的命令,所以如果你想给一个文件或目录重命名时可以用以下方法:mv 原文件(目录)名 新的文件(目录)名。
du,df
du命令可以显示目前的目录所占的磁盘空间,df命令可以显示目前磁盘剩余的磁盘空间。如果du命令不加任何参数,那么返回的是整个磁盘的使用情况,如果后面加了目录的话,就是这个目录在磁盘上的使用情况(这个功能可是dos没有的呦)。不过我一般不喜欢用du,因为它给出的信息是在是太多了,我看不过来,而df这个命令我是最常用的,因为磁盘上还剩多少空间对我来说是很重要的。
cat
这个命令是linux中非常重要的一个命令,它的功能是显示或连结一般的ascii文本文件。cat是concatenate的简写,类似于dos下面的type命令。它的用法如下:
cat text 显示text这个文件;
cat file1 file2 依顺序显示file1,file2的内容;
cat file1 file2>file3 把file1,file2的内容结合起来,再"重定向(>)"到file3文件中。
"〉"是一个非常有趣的符号,是往右重定向的意思,就是把左边的结果当成是输入,然后输入到file3这个文件中。这里要注意一点是file3是在重定向以前还未存在的文件,如果file3是已经存在的文件,那么它本身的内容被覆盖,而变成file1+file2的内容。如果〉左边没有文件的名称,而右边有文件名,例如:
cat >file1:结果是会"空出一行空白行",等待你输入文字,输入完毕后再按[Ctrl]+[c]或[Ctrl]+[d],就会结束编辑,并产生 file1这个文件,而file1的内容就是你刚刚输入的内容。这个过程和dos里面的copy con file1的结果是一样的。
另外,如果你使用如下的指令:
cat file1>>file2:这将变成将file1的文件内容"附加"到file2的文件后面,而file2的内容依然存在,这种重定向符〉〉比〉常用,可以多多利用。
more,less
这是两个显示一般文本文件的指令。如果一个文本文件太长了超过一个屏幕的画面,用cat来看实在是不理想,就可以试试more和less两个指令。 More指令可以使超过一页的文件临时停留在屏幕,等你按任何的一个键以后,才继续显示。而less除了有more的功能以外,还可以用方向键往上或网下的滚动文件,所以你随意浏览,阅读文章时,less是个非常好的选择。
clear
这个命令是用来清除屏幕的,它不需要任何参数,和dos下面的clr具有相同的功能,如果你觉得屏幕太紊乱,就可以使用它清除屏幕上的信息。
pwd
这个命令的作用是显示用户当前的工作路径,这个命令不用多说,大家一试即知。
ln
这是linux中又一个非常重要命令,请大家一定要熟悉。它的功能是为某一个文件在另外一个位置建立一个同不的链接,这个命令最常用的参数是-s,具体用法是:ln �s 源文件 目标文件。
当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。例如:ln �s /bin/less /usr/local/bin/less
-s 是代号(symbolic)的意思。
这里有两点要注意:第一,ln命令会保持每一处链接文件的同步性,也就是说,不论你改动了哪一处,其它的文件都会发生相同的变化;第二,ln的链接又软链接和硬链接两种,软链接就是ln �s ** **,它只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间,硬链接ln ** **,没有参数-s, 它会在你选定的位置上生成一个和源文件大小相同的文件,无论是软链接还是硬链接,文件都保持同步变化。
如果你用ls察看一个目录时,发现有的文件后面有一个@的符号,那就是一个用ln命令生成的文件,用ls �l命令去察看,就可以看到显示的link的路径了。
man
如果你的英文足够好,那完全可以不靠任何人就精通linux,只要你会用man。Man实际上就是察看指令用法的help,学习任何一种UNIX类的操作系统最重要的就是学会使用man这个辅助命令。man是manual(手册)的缩写字,它的说明非常的详细,但是因为它都是英文,看起来非常的头痛。建议大家需要的时候再去看man,平常吗,记得一些基本用法就可以了。
logout
一看就知道了,这是退出系统的命令,我就不多说了。要强调的一点是,linux是多用户多进程的操作系统,因此如果你不用了,退出系统就可以了,关闭系统你就不用操心了,那是系统管理员的事情。但有一点切记,即便你是单机使用linux,logout以后也不能直接关机,因为这不是关机的命令。
Best Regards
Miao Jia Hong
Cygwin的使用方法
原文如下:
By EnterBD[BCT]
QQ:4791821
E-Mail:Taynni@Gmail.com
欢迎转载和指出错误,但请保留以上信息,谢谢.
0:简介
1:下载和安装
2:使用
简介
Cygwin是一个运行于Windows下的免费的UNIX的子系统,使用一个Dll(动态链接库)来
实现,这样,我们可以开发出Cygwin下的UNIX工具,使用这个DLL运行在Windows下,大家可以想
一下,你在运行Windows的同时,也可以使用VI,BASH,TAR,SED等UNIX下的工具,不是很好吗?这个VM
虚拟机有很相同的原理,但是VM是虚拟多个,而Cygwin是同时使用Windows和UNIX,很爽吧,这样
对于那些在Windows和Unix下移植的程序来说是比较简单的事情了.
一:下载和安装
其下载安装程序在Http://www.cygwin.com,下载安装程序以后,运行,然后会要你选择是通过什么方
式进行下载安装所需要的文件,有三种方式,Http.Ftp.本地,我建议你首先通过Http和Ftp把安装所需要的
文件全部下回来以后选择本地安装比较好,在线安装比较慢,会是一个很长的等待,虽然所需要的文件
不大,但是全部安装的话会是4G大小,还是有选择性的安装吧,在安装界面,有Prev(老版本),Curr(当前版本)
Exp(最新版本测试版本),苹果这里建议你选择Curr,然后你单击View按钮,这样你可以在可以使用的安装
文件之间进行选择性的安装,如果你真的想全部安装的话,那么左键点击一下最上面的All,然后看到
INSTALL,这样选择了全部,进行全部安装便可以了,安装完以后,会在桌面产生一个图标,双击这个图标,
呵呵,你便可以使用Cygwin了.关于安装的具体参数方法,网络上有比较详细的介绍,我就不罗嗦了.
PS:下载方面我建议如下:你可以下载以下几个版本的Cygwin:
您现在可以使用Cygwin.cn的镜像,详情请参考[安装]
原始站: http://sources.redhat.com/cygwin/;
印地安那大学的免安砚光盘cygwin, 叫做 XLiveCD:http://xlivecd.indiana.edu/ ,
USA, Indiana ftp://ftp.ussg.indiana.edu/pub/xlivecd/xlivecd-20041201.iso
Mirrors:
Belgium, Geel ftp://sin.khk.be/mirror/xlivecd/xlivecd-20041201.iso
Germany, Bochum ftp://linux.rz.ruhr-uni-bochum.de/xlivecd/xlivecd-20041201.iso
Germany, Bochum http://linux.rz.ruhr-uni-bochum.de/download/xlivecd/xlivecd-20041201.iso
Sweden, Ume? http://ftp.acc.umu.se/mirror/xlivecd/xlivecd-20041201.iso
USA, Wisconsin ftp://xlivecd.mirrors.tds.net/pub/xlivecd/xlivecd-20041201.iso
USA, Georgia ftp://ftp.gtlib.cc.gatech.edu/pub/XLiveCD/xlivecd-20041201.iso
USA, Georgia http://ftp.gtlib.cc.gatech.edu/pub/XLiveCD/xlivecd-20041201.iso
苹果提示:USA, Wisconsin ftp://xlivecd.mirrors.tds.net/pub/xlivecd/xlivecd-20041201.iso
这个下载速度快
Shelley Yen 的cygnuwin : ftp://ftp.tceb.edu.tw/pub/free_software/cygnuwin/
ftp://ftp.tcc.edu.tw/iso/cygwin/cyg+gnu.iso(cygwin 与 gnuwin 的合成版本)
老古开发网:ftp://ic.laogu.com/down/cygwin.rar
http://soft.laogu.com/down/cygwin.rar (均为05年3月版本)
苹果提示:这个站点是高人站点,比较NB,呵呵,喜欢单片机的朋友有福气,超级多 的下载资料等着你,包含*NIX下的东西...
其他的镜像站点:http://cygwin.com/mirrors.html
苹果自己也下载了最新版本的Cygwin,但是偶没有空间,真的需要的话,请哪位好心人提供空间
偶可以上传上去,联系请加偶的QQ:4791821,或者给偶发邮件:Taynni@gmail.com注明一下就可以了.
二:使用
使用上的方便性很是不错,启动Cygwin以后,会在Windows下得到一个Bash Shell,由于Cygwin是以
Windows下的服务运行的,所以很多情况下和在Linux下有很大的不同,这点上,苹果建议你多理解下这个
工作环境。我们开始使用Cygwin吧,比如PS,相当于Windows下的TM(任务管理器),呵呵,直接Ps的话
那么得到的会是Cygwin下的Shell的进程如下
Taynni-417@ENTERBD-417 ~
$ ps
PID PPID PGID WINPID TTY UID STIME COMMAND
2212 1 2212 2212 con 1003 01:54:29 /usr/bin/bas
3384 2212 3384 3232 con 1003 01:59:24 /usr/bin/ps
如果这个时候你需要在Cygwin下显示Windows下的进程你可以在PS后面加上参数-aW,
PS的相关用法:
Quote
Usage ps [-aefl] [-u uid]
-f = show process uids, ppids
-l = show process uids, ppids, pgids, winpids
-u uid = list processes owned by uid
-a, -e = show processes of all users
-s = show process summary
-W = show windows as well as cygwin processes
很容易看懂吧,呵呵
有点不一样的地方,我想大家一定想知道在Cygwin下怎么访问Windows下的内容了,
呵呵,首先使用DF命令直接查看下本地驱动器,呵呵,很容易了吧,显示的内容
如下:
Quote
Taynni-417@ENTERBD-417 ~
$ df
Filesystem 1k-blocks Used Available Use% Mounted on
e:\cygwin\bin 10231384 4844432 5386952 48% /usr/bin
e:\cygwin\lib 10231384 4844432 5386952 48% /usr/lib
e:\cygwin 10231384 4844432 5386952 48% /
c: 5106676 1240312 3866364 25% /cygdrive/c
d: 10239408 6560328 3679080 65% /cygdrive/d
e: 10231384 4844432 5386952 48% /cygdrive/e
f: 6333252 4065564 2267688 65% /cygdrive/f
g: 7150972 4672724 2478248 66% /cygdrive/g
如上便是我的硬盘的全部了,在后面的/cygdrive/c便是C盘了,然后/cygdrive/d便是D盘了
这样的话,想进D盘便可以这样进,呵呵
Quote
Taynni-417@ENTERBD-417 ~
$ cd /cygdrive/d
Taynni-417@ENTERBD-417 /cygdrive/d
$ ls -l
ls: pagefile.sys: Permission denied
total 0
drwxr-xr-x 9 Taynni-4 None 0 Aug 31 20:56 Book
drwxr-xr-x 2 Taynni-4 None 0 Aug 23 05:24 Ftproot
drwxr-xr-x 30 Taynni-4 None 0 May 10 23:38 HACKER
drwxr-xr-x 11 Taynni-4 None 0 Feb 1 2005 JIAOXUE
drwxr-xr-x 8 Taynni-4 None 0 Jan 3 2005 Local Settings
dr-xr-xr-x 24 Taynni-4 None 0 Oct 16 2004 My Documents
drwxr-xr-x 12 Taynni-4 None 0 May 14 16:48 Mywww
drwxr-xr-x 2 Taynni-4 None 0 Jun 29 2004 Recycled
drwxr-xr-x 3 Taynni-4 None 0 Aug 22 04:44 SECBOOK
drwxr-xr-x 6 Taynni-4 None 0 Feb 28 2005 TaynniCHX
drwxr-xr-x 15 Taynni-4 None 0 Mar 30 01:04 TaynniGZ
drwxr-xr-x 12 Taynni-4 None 0 May 11 01:30 TaynniH
drwxr-xr-x 15 Taynni-4 None 0 Mar 12 04:27 TaynniYM
drwxr-xr-x 6 Taynni-4 None 0 Dec 13 2004 Taynniwww
drwxr-xr-x 8 Taynni-4 None 0 Aug 31 20:55 Word
Taynni-417@ENTERBD-417 /cygdrive/d
$
在Cygwin下还可以运行Windows下的程序,如下:
Taynni-417@ENTERBD-417 ~
$ cmd.exe
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
e:\cygwin\home\Taynni-417>d:
D:\>cd hacker
D:\HACKER>cd tools
D:\HACKER\Tools>cd pstools
D:\HACKER\Tools\Pstools>ls
pdh.dll pskill.exe pspasswd.exe
Psinfo.exe psexec.exe pslist.exe psservice.exe
Pstools.chm psfile.exe psloggedon.exe psshutdown.exe
README.TXT psgetsid.exe psloglist.exe pssuspend.exe
D:\HACKER\Tools\Pstools>exit
Taynni-417@ENTERBD-417 ~
$
很明显的,直接输入CMD.EXE便可以得到一个本机CMDSHELL,这样你想运行什么程序都可以了
退出到Cygwin的Bash shell需要使用exit命令,很方便吧,呵呵
在Cygwin下还可以进行编译程序,比如C和perl,当然,你也可以借助ActivePy,这个东西也很不错
也是一个仿真器,在Windows下模拟perl的解释器.
对于一个系统而言,没有相应的系统工具是不可能的,在Cygwin下拥有的UNIX工具基本上够你使用
了。当然,这需要你安装完整的Cygwin包,我的机子上就安装了完整的,比较大,如果硬盘允许,苹果建
议你完整安装!像grep,cut,sed,strings,strace,md5sum,diff,patch,ssh,xxd,等等工具
你都可以进行安装和使用,如果你真的不知道应该怎么用这些工具,其实苹果很多也不会,只要去接触
你就会了!!!没有不会使用的东西,只有你愿意不愿意去使用而已!说笑了,言归正传,请使用
所要使用的命令 --help获取帮助,如下所示:比如我不知道md5sum做什么用的
(这个命令是用于效验文件md5值的,主要是为了文件的完整性和安全性)
Quote
Taynni-417@ENTERBD-417 ~
$ md5sum --help
Usage: md5sum [OPTION] [FILE]...
or: md5sum [OPTION] --check [FILE]
Print or check MD5 (128-bit) checksums.
With no FILE, or when FILE is -, read standard input.
-b, --binary read files in binary mode (default on DOS/Windows)
-c, --check check MD5 sums against given list
-t, --text read files in text mode (default)
The following two options are useful only when verifying checksums:
--status don't output anything, status code shows success
-w, --warn warn about improperly formated checksum lines
--help display this help and exit
--version output version information and exit
The sums are computed as described in RFC 1321. When checking, the input
should be a former output of this program. The default mode is to print
a line with checksum, a character indicating type (`*' for binary, ` ' for
text), and name for each FILE.
Taynni-417@ENTERBD-417 ~
$
基本使用上应该没有多大的问题了,文章因为我偷懒,也是不知道该怎么写才可以帮助大家
我很苦恼的是,并没有人给我意见,所以先写这么点吧,如果你有问题的话,请加我的qq或者
给我邮件,大家可以讨论,不是么?
下面给出一些关于Cygwin的资料:
1:http://www.isi.edu/nsnam/ns/ns-cygwin.html
2:http://pigtail.net/LRP/printsrv/cygwin-sshd.html
3:http://kde-cygwin.sourceforge.net/
4:http://x.cygwin.com/
5:http://chinyi.ncit.edu.tw/~peterju/cygwin.html
6:http://cygnome.sourceforge.net/
http://xlivecd.indiana.edu/
cygwin,在win中开发linux程序
作者:乾坤一笑 CSDN (2005-04-06 17:17:39)
很多用windows的朋友不习惯于用linux的开发环境。虽然很乐意尝试一下,但是往往怕 linux系统打乱了自己的正常生活:1〉装linux系统把windows系统给搞坏了,导致自己无法正常生活;2>linux开发上手太难,写出第一个helloworld不亚于java的难度,环境配置摸不着头脑。对于此,我的看法是:路不管平还是陡,终归你要走的,如果你愿意投入到 linux开发的社群中来,不会安装linux系统,不会配置工作环境是不能想象的。(事实上,确实要了解很多东西的原理,不然很难排错:诸如,硬盘引导器的引导原理、分区结构原理及linux分区结构和文件系统、环境变量的设置、种类繁多的压缩包安装包的解压安装方法、用户管理权限管理等常用命令、以至于驱动安装系统中文化等等异常琐碎的东东)。
本文试图跳过这个难走的步骤,启用一个win环境下的linux仿真器(和linux下面的命令行开发环境基本一致),用短短的20分钟的时间,教你做出一个纯正的linux下gcc编译的helloworld。就象是买点心前先尝尝味道,不也是一件很愉快的事情么?(注:cygwin事实上不仅有此模拟功能,它也是移植unix<-->win程序的一个很有效的工具,也有人用它来做嵌入式系统开发)
一、cygwin是什么?
这个问题你最好google一下"cygwin的历史",或许能够获得更为详尽的答案。简而言之,cygwin是一个在windows平台上运行的 linux模拟环境,是cygnus solutions公司开发的自由软件(该公司开发了很多好东西,著名的还有eCos,不过现已被Redhat收购)。插一句废话,很多朋友不明白 linux和unix的区别和联系,在此也简要介绍一下。UNIX是一个注册商标,是要满足一大堆条件并且支付可观费用才能够被授权使用的一个操作系统; linux是unix的克隆版本,是由其创始人Linus和诸多世界知名的黑客手工打造的一个操作系统。为什么linux和unix之间有很多软件可以很轻松的移植?因为linux也满足POSIX规范,所以在运行机制上跟unix相近。
以下引用网上的一段话(出处:http://blog.csdn.net/glock18/archive/2004/07/10/38275.aspx),
用于说明cygwin的工作机制:cygnus当初首先把gcc,gdb,gas等开发工具进行了改进,使他们能够生成并解释win32的目标文件。然后,他们要把这些工具移植到windows平台上去。一种方案是基于win32 api对这些工具的源代码进行大幅修改,这样做显然需要大量工作。因此,他们采取了一种不同的方法――他们写了一个共享库(就是cygwin dll),把win32 api中没有的unix风格的调用(如fork,spawn,signals,select,sockets等)封装在里面,也就是说,他们基于 win32 api写了一个unix系统库的模拟层。这样,只要把这些工具的源代码和这个共享库连接到一起,就可以使用unix主机上的交叉编译器来生成可以在 windows平台上运行的工具集。以这些移植到windows平台上的开发工具为基础,cygnus又逐步把其他的工具(几乎不需要对源代码进行修改,只需要修改他们的配置脚本)软件移植到windows上来。这样,在windows平台上运行bash和开发工具、用户工具,感觉好像在unix上工作。关于cygwin实现的更详细描述,请参考http://cygwin.com/cygwin-ug-net/highlights.html
二、cygwin的安装。
cygwin的安装文件很容易通过google找到。目前国内的网站上有"网络安装版"和"本地安装版"两种。标准的发行版应该是 网络安装版。两者并无大不同,下面介绍一下安装的过程。
step1. 下载后,点击安装文件(setup.exe)进行安装,第一个画面是GNU版权说明,点"下一步(N)―>",
进入安装模式选择画面。
step2. 安装模式有"Install from Internet"、"Download form Internet"、
"Install from Local Directory" 三种。"Install form Internet"就是直接从internet上装,适用于网速较快的情况。如果你和我一样网速不是很快,或者说装过之后想把下载的安装文件保存起来,下次不再下载了直接安装,就应该选择"Download form Internet",下载安装的文件(大约40M左右)。
事实上,所谓的"本地安装版",也是别人从网上下载全部文件后打的包(适用于中国国情嘛^_^)
step3. 接下来是选择安装目的路径和安装源文件所在的路径,之后就进入了选择安装包所在的路径。
注意了阿,这里可是重头戏。我第一安装的时候就是没有看清这一步,结果没有把gcc装进去,导致没法编译文件。
+ All Default
+ Admin Default
....
+ Devel Default
+ Editors Default
....
如上图所示,你在这个TreeView的某个节点上双击,就可以改变它的状态,如Default、Install、Uninstall、Reinstall四种状态。默认的都是Default状态,很多工具的默认状态都是不安装。
在这里我选择了在All这一行上后面的Default上点Install,全部安装,以免后患。(注意:这里的树形控件和win下面的不同,你试试点在All上点 和 在All这一行后面的Default上点,会有不同的响应)
step4. 点下一步,安装成功。它会自动在你的桌面上建立一个快捷方式。
好了,下面就开始我的linux旅程了。双击cygwin的快捷方式进入系统。
首先介绍几个简单的linux命令。
pwd 显示当前的路径
cd 改变当前路径,无参数时进入对应用户的home目录
ls 列出当前目录下的文件。此命令有N多参数,比如ls -al
ps 列出当前系统进程
kill 杀死某个进程
mkdir 建立目录
rmdir 删除目录
rm 删除文件
mv 文件改名或目录改名
man 联机帮助
less 显示文件的最末几行
由于linux下面的命令大多都有很多参数,可以组合使用。所以,每当你不会或者记不清楚改用那个参数,那个开关的时候,可以用man来查找,比如,我想查找ls怎么使用,可以键入
$ man ls
系统回显信息如下:
LS(1) FSF LS(1)
NAME
ls - list directory contents
SYNOPSIS
ls [OPTION]... [FILE]...
DESCRIPTION
List information about the FILEs (the current directory by
default). Sort entries alphabetically if none of -cftuSUX
nor --sort.
-a, --all
do not hide entries starting with .
-A, --almost-all
do not list implied . and ..
-b, --escape
print octal escapes for nongraphic characters
--block-size=SIZE
use SIZE-byte blocks
:
很全是吧,嘿嘿。
好了,多说无意,让我们
Cygwin的安装
本来我是安装了Linux10,但是使用过程中还是需要经常回到windows查看一些文档啊、拷贝一些文件啊,太烦了,所以呢还是决定把Cygwin搞起来,这样在windows下工作就方便多了。
Cygwin的安装有两种方法:
一种是直接在线安装,这是按配置需要下载的,但是下载的东西会很多很大,400M左右,需要的时间比较长。
第二种是先到macraigor下载一个安装包,60多M,下载速度很快。安装选项也简单。然后再执行在线安装,安装Ncurses libraries就可以了。
我开始使用第一种方法,搞了几天,重复了很多次,可老是安装不好,最后还是用第二种方法搞定的。
1.2 2.2. 下载
1.2.1 2.2.1. CYGWIN(2.0.0)
See document: http://www.macraigor.com/full_gnu.htm <http://www.macraigor.com/full_gnu.htm>
60M.下载速度很快,我用ADSL下载速度达到70多K,比一般下载得快多了,不过我是后半夜下载的。:)
1.3 2.3. 安装
从macraigor下载的Cygwin2.0直接安装就可以了,安装过程很简单。但是似乎缺少一个组件Ncurses libraries,在make menuconfig的时候会报错,需要执行在线安装的步骤添加这个组件。
1.4 2.4. 在线安装
1.4.1 2.4.1. 下载setup.exe
See document: www.cygwin.com <outbind://1/www.cygwin.com>
登陆www.cygwin.com,页面上有一个Install Cygwin Now的连接,是一个setup.exe文件,直接打开也可以,推荐下载下来,存到一个目录里,这样可以把文件下载下来,以后安装就方便了。
1.4.2 2.4.2. 安装选项
必须安装的子目录(sub category): (把子目录旁边的"default"用鼠标点一下,直到变成"install")
Archive
Base
Devel:包括gcc、make等编译工具
Libs
Net
DEShells
Utils: 包括bzip2等实用工具
如果是已经从macraigor下载安装了Cygwin,那么选择安装 Devel下的libncurses-devel一项就可以了。
大家可选择较快的下载地址,我是用的mirrors.rcn.net,下载速度在20k左右。
必须通过cygwin提供的setup.exe进行安装,可根据安装提示一步一步进行,提供通过internet安装方式或本地安装方式。建议把cygwin整个安装包下载到本地再进行本地安装比较方便。如果无特殊需求,可简单按它的缺省安装方式安装最少数量的软件包。建议不要安装到c:\下。cygwin的问题和解答可参考cygwin FAQ。
1.5 设置
1.5.1 批处理文件
在自己生成交叉编译器之前,首先对Cygwin进行一些设置。假设Cygwin安装在e目录下,在打开Cygwin窗口之前,进入到E:\Cygwin目录。在这个目录下,有一个文件名为Cygwin.bat的批处理文件,编辑该文件,在第一行后加入set CYGWIN=title ntea,这是因为Cygwin的启动批处理文件需要启动Unix文件系统模拟。修改完毕且保存后退出。
1.5.2 SH链接
运行cygwin,在根目录下输入,cd bin
mv sh.exe sh-original.exe
ln �s bash.exe sh.exe
现在对cygwin的修改搞定
1.6 2.5. 运行
从程序组或者桌面启动Cygwin。
输入:
cd /
ls
能列出目录说明就ok了。
--
由 Pegasus 于 1/14/2008 05:37:00 下午 在 嘻嘻哈哈 上发表
Cygwin使用指南
solutions公司开发的自由软件(该公司开发了很多好东西,著名的还有eCos,不过现已被Redhat收购)。它对于学习unix/linux操
作环境,或者从unix到windows的应用程序移植,或者进行某些特殊的开发工作,尤其是使用gnu工具集在windows上进行嵌入式系统开发,非
常有用。随着嵌入式系统开发在国内日渐流行,越来越多的开发者对cygwin产生了兴趣。本文将对其作一介绍。
根据cygwin user guide翻译整理,希望对大家有所帮助。有错误清指出。
1 引言
cygwin
是一个在windows平台上运行的unix模拟环境,是cygnus
solutions公司开发的自由软件(该公司开发了很多好东西,著名的还有eCos,不过现已被Redhat收购)。它对于学习unix/linux操
作环境,或者从unix到windows的应用程序移植,或者进行某些特殊的开发工作,尤其是使用gnu工具集在windows上进行嵌入式系统开发,非
常有用。随着嵌入式系统开发在国内日渐流行,越来越多的开发者对cygwin产生了兴趣。本文将对其作一介绍。
2 机理
cygnus
当初首先把gcc,gdb,gas等开发工具进行了改进,使他们能够生成并解释win32的目标文件。然后,他们要把这些工具移植到windows平台上
去。一种方案是基于win32
api对这些工具的源代码进行大幅修改,这样做显然需要大量工作。因此,他们采取了一种不同的方法――他们写了一个共享库(就是cygwin
dll),把win32
api中没有的unix风格的调用(如fork,spawn,signals,select,sockets等)封装在里面,也就是说,他们基于
win32
api写了一个unix系统库的模拟层。这样,只要把这些工具的源代码和这个共享库连接到一起,就可以使用unix主机上的交叉编译器来生成可以在
windows平台上运行的工具集。以这些移植到windows平台上的开发工具为基础,cygnus又逐步把其他的工具(几乎不需要对源代码进行修改,
只需要修改他们的配置脚本)软件移植到windows上来。这样,在windows平台上运行bash和开发工具、用户工具,感觉好像在unix上工作。
关于cygwin实现的更详细描述,请参考http://cygwin.com/cygwin-u...
(cygwin.com在电信ADSL似乎被屏蔽了,不知道原因。)
3 安装设置cygwin
3.1 安装
要安装网络版的cygwin,可以到http://cygwin.com,点击"Install Cygwin Now!"。这样会先下载一个叫做setup.exe的GUI安装程序,用它能下载一个完整的cygwin。按照每一屏的指示可以方便的进行安装。
3.2 环境变量
开始运行bash之前,应该设置一些环境变量。cygwin提供了一个.bat文件,里面已经设置好了最重要的环境变量。通过它来启动bash是最安全的办法。这个.bat文件安装在cygwin所在的根目录下。 可以随意编辑该文件。
CYGWIN变量用来针对cygwin运行时系统进行多种全局设置。开始时,可以不设置CYGWIN或者在执行bash前用类似下面的格式在dos框下把它设为tty
C:\> set CYGWIN=tty notitle glob
PATH
变量被cygwin应用程序作为搜索可知性文件的路径列表。当一个cygwin进程启动时,该变量被从windows格式(e.g.
C:\WinNT\system32;C:\WinNT)转换成unix格式(e.g.,
/WinNT/system32:/WinNT)。如果想在不运行bash的时候也能够使用cygwin工具集,PATH起码应该包含x:\cygwin
\bin,其中x:\cygwin 是你的系统中的cygwin目录。
HOME变量用来指定主目录,推荐在执行bash前定义该变量。当
cygwin进程启动时,该变量也被从windows格式转换成unix格式,例如,作者的机器上HOME的值为C:\(dos命令set
HOME就可以看到他的值,set HOME=XXX可以进行设置),在bash中用echo $HOME看,其值为/cygdrive/c.
TERM变量指定终端型态。如果美对它进行设置,它将自动设为cygwin。
LD_LIBRARY_PATH被cygwin函数dlopen()作为搜索.dll文件的路径列表,该变量也被从windows格式转换成unix格式。多数Cygwin应用程序不使用dlopen,因而不需要该变量。
3.3 改变cygwin的最大存储容量
Cygwin
程序缺省可以分配的内存不超过384
MB(program+data)。多数情况下不需要修改这个限制。然而,如果需要更多实际或虚拟内存,应该修改注册表的
HKEY_LOCAL_MACHINE或HKEY_CURRENT_USER区段。田家一个DWORD键heap_chunk_in_mb并把它的值设为
需要的内存限制,单位是十进制MB。也可以用cygwin中的regtool完成该设置。例子如下:
regtool -i set /HKLM/Software/Cygnus\ Solutions/Cygwin/heap_chunk_in_mb 1024
regtool -v list /HKLM/Software/Cygnus\ Solutions/Cygwin
4 使用cygwin
这一段讲一下cygwin和传统unix系统的不同之处。
4.1 映射路径名
4.1.1 引言
cygwin
同时支持win32和posix风格的路径,路径分隔符可以是正斜杠也可以是反斜杠。还支持UNC路径名。(在网络中,UNC是一种确定文件位置的方法,
使用这种方法用户可以不关心存储设备的物理位置,方便了用户使用。在Windows操作系统,Novell
Netware和其它操作系统中,都已经使用了这种规范以取代本地命名系统。在UNC中,我们不用关心文件在什么盘(或卷)上,不用关心这个盘(或卷)所
在服务器在什么地方。我们只要以下面格式就可以访问文件:
\服务器名\共享名\路径\文件名
共享名有时也被称为文件所在卷或存储设备的逻辑标识,但使用它的目的是让用户不必关心这些卷或存储设备所在的物理位置。)
符合posix标准的操作系统(如linux)没有盘符的概念。所有的绝对路径都以一个斜杠开始,而不是盘符(如c:)。所有的文件系统都是其中的子目录。例如,两个硬盘,其中之一为根,另一个可能是在/disk2路径下。
因
为许多unix系统上的程序假定存在单一的posix文件系统结构,所以cygwin专门维护了一个针对win32文件系统的内部posix视图,使这些
程序可以在windows下正确运行。在某些必要的情况下,cygwin会使用这种映射来进行win32和posix路径之间的转换。
4.1.2 cygwin mount表
cygwin
中的mount程序用来把win32盘符和网络共享路径映射到cygwin的内部posix目录树。这是与典型unix
mount程序相似的概念。对于那些对unix不熟悉而具有windows背景的的人来说,mount程序和早期的dos命令join非常相似,就是把一
个盘符作为其他路径的子目录。
路径映射信息存放在当前用户的cygwin mount表中,这个mount table
又在windows的注册表中。这样,当该用户下一次登录进来时,这些信息又从注册表中取出。mount
表分为两种,除了每个用户特定的表,还有系统范围的mount表,每个cygwin用户的安装表都继承自系统表。系统表只能由拥有合适权限的用户
(windows nt的管理员)修改。
当前用户的mount表可以在注册表"HKEY_CURRENT_USER/Software/Red Hat, Inc./Cygwin/mounts v" 下看到。系统表
存在HKEY_LOCAL_MACHINE下。
posix
根路径/缺省指向系统分区,但是可以使用mount命令重新指向到windows文件系统中的任何路径。cygwin从win32路径生成posix路径
时,总是使用mount表中最长的前缀。例如如果c:被同时安装在/c和/,cygwin将把C:/foo/bar转换成/c/foo/bar.
如果不加任何参数地调用mount命令,会把Cygwin当前安装点集合全部列出。在下面的例子中,c盘是POSIX根,而d盘被映射到/d。本例中,根是一个系统范围的安装点,它对所有用户都是可见的,而/d仅对当前用户可见。
c:\> mount
f:\cygwin\bin on /usr/bin type system (binmode)
f:\cygwin\lib on /usr/lib type system (binmode)
f:\cygwin on / type system (binmode)
e:\src on /usr/src type system (binmode)
c: on /cygdrive/c type user (binmode,noumount)
e: on /cygdrive/e type user (binmode,noumount)
还可以使用mount命令增加新的安装点,用umount删除安装点。
当Cygwin
不能根据已有的安装点把某个win32路径转化为posix路径时,cygwin会自动把它转化到一个处于缺省posix路径/cygdrive下的的一
个安装点. 例如,如果Cygwin 访问Z:\foo,而Z盘当前不在安装表内,那么Z:\将被自动转化成/cygdrive/Z.
可以给每个安装点赋予特殊的属性。自动安装的分区显示为"auto"安装。安装点还可以选择是"textmode"还是 "binmode",这个属性决定了文本文件和二进制文件是否按同样的方式处理。
4.1.3 其他路径相关信息
cygpath工具提供了在shell脚本中进行win32-posix路径格式转换的能力。
HOME, PATH,和LD_LIBRARY_PATH环境变量会在cygwin进程启动时自动被从Win32格式转换成了POSIX格式(例如,如果存在从该win32路径到posix路径的安装,会把c:\cygwin\bin转为/bin)。
Cygwin介绍
运行Cygwin后,你会得到一个类似Linux的Shell环境,在其中你可以使用绝大部分Linux软件和功能。如Gcc,Make,Vim,Emacs等等。总之如果你想使用某个Linux下的功能,而windows上又找不到好的替代品的话,你就可以用Cygwin。我使用的最频繁的是Gcc和Make。我经常用它们来编译一些我从网上下载的开源的工程。这些工程在Windows上编译往往很麻烦。我也用它做过X Server来连接一台真正的Linux服务器,用来测试一个用tcl/tk编写的跨平台的用户界面程序。下面,我逐步介绍Cygwin的基本用法。
使用
安装完成后,在桌面上会有一个Cygwin的图标,双击它,会出现一个windows的命令窗口,过一会,你就会见到熟悉(或者陌生)的 Linux的Shell界面。试一试ls ,是不是可以工作了?
从今往后,你就可以自由的在windows下使用Linux的软件了。基本上你能用到,cygwin都有。如果你要开发可以在两个平台上运行的程序, cygwin也是你前期试验的好地方。从互联网上下载的各种开源代码,也可以在Cygwin里编译,运行,调试。下面介绍一些使用技巧,更多地还要靠大家自己探索拉!
使用Cygwin访问windows的文件
Cygwin安装后,其根目录位于你的安装目录下。所以使用cd /,只能访问到你的安装目录,要访问硬盘上的其他文件,可以使用mount:
mount D:/testdir ~/testdir
这样,你就可以在~/testdir里访问到D:/testdir里的内容了。
使用Cygwin作为X Server
现在的Linux服务器一般都提供X,要从Windows上使用Linux的X,需要在Windows上运行一个X Server。有一些专门为windows开发的软件可以做这个,但是Cygwin自带的X server就可以胜任。下面举例说明如何使用:
首先你必须安装X11包,然后运行Cygwin shell,输入x&。这时候你的桌面上出出现一个布满斜纹大窗口,这就是我们的X server了,回头Linux机器上的X 程序就会显示在这里:
MinGW简介,安装,配置,调试说明
标签: MinGW MinGW-4.1.1.exe Visual-MinGW 0.53 mingw32-make-3.80.0-3.exe
MinGW简介,安装,配置,调试说明
MinGW - Minimalist GNU for Windows
MinGW - Windows平台下GNU工具的最小子集
MinGW: A collection of freely available and freely distributable Windows specific header files and import libraries combined with GNU toolsets that allow one to produce native Windows programs that do not rely on any 3rd-party C runtime DLLs.
MinGW:可以免费获得和发布的Windows头文件和导入库文件,以及可以用来产生不依赖于任何第三方C运行时的GNU工具集。
mingw是windows版本的gnu c/c++工具集 主要包括编译器gcc,连接器make,调试器gdb
MinGW 官方网站为 http://www.mingw.org
可参考最新版本,为如下地址:
http://sourceforge.net/projects/mingw/
安装软件:
1,MinGW-4.1.1.exe,通过网络安装,将所有的东西都装在C:\MinGW(默认目录)
下载地址:http://prdownloads.sourceforge.net/mingw/MinGW-4.1.1.exe?download
2,Visual-MinGW 0.53,安装完毕后,Visual-MinGW会提示让你寻找compile目录,这时候选mingw安装目录(默认是C:\MinGW)即可
下载地址:http://prdownloads.sourceforge.net/visual-mingw/vm-0.53a-20031011.exe?download
3,mingw32-make-3.80.0-3.exe
下载地址:http://prdownloads.sourceforge.net/mingw/mingw32-make-3.80.0-3.exe?download
4,配置环境变量,复制"mingw32-make.exe"增加"make.exe"
5,打开Visual-MinGW,想写点啥就写点啥吧,finish
by Longman 2007.05.10 11:11
提示:
(1)MinGW-4.1.1.exe安装时(这里只是安装"current",不安装"source")下载以下几个包:
ada.tar.gz
binutils.tar.gz
g++.tar.gz
g77.tar.gz
gcc.tar.gz
java.tar.gz
runtime.tar.gz
w32api.tar.gz
objc.tar.gz
mingw32-make.tar.gz
如果你水平可以,完全可以单独下几个自己需要的包配置一下,而不需要安装
在(1)里如上配置为参考网上仁兄的,你也可以默认安装,me too :(
(2)配置环境变量:
PATH C:\MinGW\bin; (千万别直接覆盖PATH变量,务必将其放在最前面,要用分号隔开)
LIBRARY_PATH C:\MinGW\lib
C_INCLUDEDE_PATH C:\MinGW\include
CPLUS_INCLUDE_PATH C: \MinGW\include\c++\3.4.2;C:\MinGW\include\c++\3.4.2\mingw32;C:\MinGW\include \c++\3.4.2\backward;C:\MinGW\include (不同版本的c++版本不同,不要盲目照转,如安装不同的MinGW版本,清注意配置)
(3)将C:\MinGW\bin下的文件"mingw32-make.exe"复制一份并改名为"make.exe",方便以后操作。
测试:
(1)在cmd中执行下make命令(如c:\MinGW\bin>make.exe),如果出现"***No targets specfied and no make file found stop",设置成功。
(2)在cmd中输入"gcc -v",如果屏幕出现"gcc不是内部命令或外部命令,也不是可运行的程序或批处理文件。"表示环境变量设定有问题。如果出现如下显示,表示设定成功。
Reading specs from c:/mingw/bin/../lib/gcc/mingw32/3.4.2/specs
Configured with: ../gcc/configure --with-gcc --with-gnu-ld --with-gnu-as --host=
mingw32 --target=mingw32 --prefix=/mingw --enable-threads --disable-nls --enable
-languages=c,c++,f77,ada,objc,java --disable-win32-registry --disable-shared --e
nable-sjlj-exceptions --enable-libgcj --disable-java-awt --without-x --enable-ja
va-gc=boehm --disable-libgcj-debug --enable-interpreter --enable-hash-synchroniz
ation --enable-libstdcxx-debug
Thread model: win32
gcc version 3.4.2 (mingw-special)
(3)在cmd中输入"mingw32-make -version",如果屏幕出现:
GNU Make 3.80
Copyright (C) 2002 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
如上显示,恭喜你,MinGW安装成功了
2008年1月11日星期五
GCC
gcc [ option filename ]...
g++ [ option filename ]...
其中 option 为 gcc 使用时的选项(后面会再详述),而 filename 为欲以 gcc 处理的文件
说明:
这 C 与 C++ 的 compiler 已将产生新程序的相关程序整合起来。产生一个新的程序需要经过四个阶段:预处理、编译、汇编、连结,而这两个编译器都能将输入的文件做不同阶段的处理。虽 然原始程序的扩展名可用来分辨编写原始程序码所用的语言,但不同的compiler,其预设的处理程序却各不相同:
gcc 预设经由预处理过(扩展名为.i)的文件为 C 语言,并於程式连结阶段以 C 的连结方式处理。
g++ 预设经由预处理过(扩展名为.i)的文件为 C++ 语言,并於程序连结阶段以 C++ 的连结方式处理。
原始程序码的扩展名指出所用编写程序所用的语言,以及相对应的处理方法:
.c C 原始程序 ; 预处理、编译、汇编
.C C++ 原始程序 ; 预处理、编译、汇编
.cc C++ 原始程序 ; 预处理、编译、汇编
.cxx C++ 原始程序 ; 预处理、编译、汇编
.m Objective-C 原始程序 ; 预处理、编译、汇编
.i 已经过预处理之 C 原始程序 ; 编译、汇编
.ii 已经过预处理之 C++ 原始程序 ; 编译、汇编
.s 组合语言原始程序 ; 汇编
.S 组合语言原始程序 ; 预处理、汇编
.h 预处理文件(标头文件) ; (不常出现在指令行)
其他扩展名的文件是由连结程序来处理,通常有:
.o Object file
.a Archive file
除非编译过程出现错误,否则 "连结" 一定是产生一个新程序的最後阶段。然而你也可以以 -c、-s 或 -E 等选项,将整个过程自四个阶段中的其中一个停止。在连结阶段,所有与原始码相对应的.o 文件、程序库、和其他无法自文件名辨明属性的文件(包括不以 .o为扩展名的 object file 以及扩展名为 .a 的 archive file)都会交由连结程序来处理(在指令行将那些文件当作连结程序的参数传给连结程序)。
选项:
不同的选项必须分开来下:例如 `-dr' 这个选项就与 `-d -r' 大不相同。
绝大部份的 `-f' 及 `-W' 选项都有正反两种形式:-fname 及-fno-name (或 -Wname 及 -Wno-name)。以下只列出非预设的那个形式。
以下是所有选项的摘要。以形式来分类。选项的意义将另辟小节说明。
一般性(概略、常用的)选项
-c -S -E -o file -pipe -v -x language
程序语言选项
-ansi -fall-virtual -fcond-mismatch
-fdollars-in-identifiers -fenum-int-equiv
-fexternal-templates -fno-asm -fno-builtin
-fno-strict-prototype -fsigned-bitfields
-fsigned-char -fthis-is-variable
-funsigned-bitfields -funsigned-char
-fwritable-strings -traditional -traditional-cpp
-trigraphs
编译时的警告选项
-fsyntax-only -pedantic -pedantic-errors -w -W
-Wall -Waggregate-return -Wcast-align -Wcast-qual
-Wchar-subscript -Wcomment -Wconversion
-Wenum-clash -Werror -Wformat -Wid-clash-len
-Wimplicit -Winline -Wmissing-prototypes
-Wmissing-declarations -Wnested-externs -Wno-import
-Wparentheses -Wpointer-arith -Wredundant-decls
-Wreturn-type -Wshadow -Wstrict-prototypes -Wswitch
-Wtemplate-debugging -Wtraditional -Wtrigraphs
-Wuninitialized -Wunused -Wwrite-strings
除错选项
-a -dletters -fpretend-float -g -glevel -gcoff
-gxcoff -gxcoff+ -gdwarf -gdwarf+ -gstabs -gstabs+
-ggdb -p -pg -save-temps -print-file-name=library
-print-libgcc-file-name -print-prog-name=program
最佳化选项
-fcaller-saves -fcse-follow-jumps -fcse-skip-blocks
-fdelayed-branch -felide-constrUCtors
-feXPensive-optimizations -ffast-math -ffloat-store
-fforce-addr -fforce-mem -finline-functions
-fkeep-inline-functions -fmemoize-lookups
-fno-default-inline -fno-defer-pop
-fno-function-cse -fno-inline -fno-peephole
-fomit-frame-pointer -frerun-cse-after-loop
-fschedule-insns -fschedule-insns2
-fstrength-reduce -fthread-jumps -funroll-all-loops
-funroll-loops -O -O2
预处理选项
-Aassertion -C -dD -dM -dN -Dmacro[=defn] -E -H
-idirafter dir -include file -imacros file -iprefix
file -iwithprefix dir -M -MD -MM -MMD -nostdinc -P
-Umacro -undef
汇编程序选项
-Wa,option
连结程序选项
-llibrary -nostartfiles -nostdlib -static -shared
-symbolic -Xlinker option -Wl,option -u symbol
目录选项
-Bprefix -Idir -I- -Ldir
Target Options
-b machine -V version
与机器(平台)相关的选项
M680x0 Options
-m68000 -m68020 -m68020-40 -m68030 -m68040 -m68881
-mbitfield -mc68000 -mc68020 -mfpa -mnobitfield
-mrtd -mshort -msoft-float
VAX Options
-mg -mgnu -munix
SPARC Options
-mepilogue -mfpu -mhard-float -mno-fpu
-mno-epilogue -msoft-float -msparclite -mv8
-msupersparc -mcypress
Convex Options
-margcount -mc1 -mc2 -mnoargcount
AMD29K Options
-m29000 -m29050 -mbw -mdw -mkernel-registers
-mlarge -mnbw -mnodw -msmall -mstack-check
-muser-registers
M88K Options
-m88000 -m88100 -m88110 -mbig-pic
-mcheck-zero-division -mhandle-large-shift
-midentify-revision -mno-check-zero-division
-mno-ocs-debug-info -mno-ocs-frame-position
-mno-optimize-arg-area -mno-serialize-volatile
-mno-underscores -mocs-debug-info
-mocs-frame-position -moptimize-arg-area
-mserialize-volatile -mshort-data-num -msvr3 -msvr4
-mtrap-large-shift -muse-div-instruction
-mversion-03.00 -mwarn-passed-structs
RS6000 Options
-mfp-in-toc -mno-fop-in-toc
RT Options
-mcall-lib-mul -mfp-arg-in-fpregs -mfp-arg-in-gregs
-mfull-fp-blocks -mhc-struct-return -min-line-mul
-mminimum-fp-blocks -mnohc-struct-return
MIPS Options
-mcpu=cpu type -mips2 -mips3 -mint64 -mlong64
-mlonglong128 -mmips-as -mgas -mrnames -mno-rnames
-mgpopt -mno-gpopt -mstats -mno-stats -mmemcpy
-mno-memcpy -mno-mips-tfile -mmips-tfile
-msoft-float -mhard-float -mabicalls -mno-abicalls
-mhalf-pic -mno-half-pic -G num -nocpp
i386 Options
-m486 -mno-486 -msoft-float -mno-fp-ret-in-387
HPPA Options
-mpa-risc-1-0 -mpa-risc-1-1 -mkernel -mshared-libs
-mno-shared-libs -mlong-calls -mdisable-fpregs
-mdisable-indexing -mtrailing-colon
i960 Options
-mcpu-type -mnumerics -msoft-float
-mleaf-procedures -mno-leaf-procedures -mtail-call
-mno-tail-call -mcomplex-a
http://blog.csdn.net/visioncat/archive/2006/05/07/711693.aspx
http://blog.vckbase.com/bastet/archive/2005/04/26/4985.aspx
http://www.mingw.org/download.shtml
Best Regards
Miao Jia Hong
2008年1月8日星期二
error LNK2001错误
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
我的解决方法如下:
点击"Project|settings",选择C/C++标签,在CODE GENERATION分类中选择"Debug MultiThreaded"
再重新rebuild all后,问题可以得到解决.
可能原因是我在程序中用到
HINSTANCE hInstance = GetModuleHandle(NULL);
DialogBoxParam(hInstance, (LPCTSTR)IDD_QQTDlg, 0, (DLGPROC)QQDlg, 0);
这个是需要多线程的,因此会出现上面的问题。
经网上查阅资料,得到此类问题的常用解决办法。如下:
在创建MFC项目时, 不使用MFC AppWizard向导, 如果没有设置好项目参数, 就会在编译时产生很多连接错误, 如error LNK2001错误, 典型的错误提示有:
libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
下面介绍解决的方法:
1. Windows子系统设置错误, 提示:
libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Windows项目要使用Windows子系统, 而不是Console, 可以这样设置:
[Project] --> [Settings] --> 选择"Link"属性页,
在Project Options中将/subsystem:console改成/subsystem:windows
2. Console子系统设置错误, 提示:
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16控制台项目要使用Console子系统, 而不是Windows, 设置:
[Project] --> [Settings] --> 选择"Link"属性页,
在Project Options中将/subsystem:windows改成/subsystem:console
3. 程序入口设置错误, 提示:
msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16
通常, MFC项目的程序入口函数是WinMain, 如果编译项目的Unicode版本, 程序入口必须改为wWinMainCRTStartup, 所以需要重新设置程序入口:
[Project] --> [Settings] --> 选择"C/C++"属性页,
在Category中选择Output,
再在Entry-point symbol中填入wWinMainCRTStartup, 即可
4. 线程运行时库设置错误, 提示:
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
这是因为MFC要使用多线程时库, 需要更改设置:
[Project] --> [Settings] --> 选择"C/C++"属性页,
在Category中选择Code Generation,
再在Use run-time library中选择Debug Multithreaded或者multithreaded
其中,
Single-Threaded 单线程静态链接库(release版本)
Multithreaded 多线程静态链接库(release版本)
multithreaded DLL 多线程动态链接库(release版本)
Debug Single-Threaded 单线程静态链接库(debug版本)
Debug Multithreaded 多线程静态链接库(debug版本)
Debug Multithreaded DLL 多线程动态链接库(debug版本)
单线程: 不需要多线程调用时, 多用在DOS环境下
多线程: 可以并发运行
静态库: 直接将库与程序Link, 可以脱离MFC库运行
动态库: 需要相应的DLL动态库, 程序才能运行
release版本: 正式发布时使用
debug版本: 调试阶段使用