当前位置:首页 » 操作系统 » 大街网源码

大街网源码

发布时间: 2025-03-02 03:51:05

A. 透过源码领悟GCC到底在干些什么 GCC源码分析

上半年一直在做有关GCC和LD的项目,到现在还没做完。最近几天编程的那台电脑坏了,所以趁此间隙写一点相关的分析和经验之类的跟大家共享。
一、GCC的作用和运行机制
GCC是Linux下重要的编译工具,用法这里就不说了,满大街都找得到。这里我重点介绍GCC的运作机制,作为代码分析的铺垫。全篇使用C语言子部件来作分析,因为我对其他语言的编译没有研究。
根据编译原理,语言的编译分为这么几个步骤:词法分析、语法分析、语义分析、中间语言生成、优化、目标代码生成等。然而从编译器使用的角度来看,要把源代码翻译为可执行文件要经过编译和连接两步,与此对应,一塌帆个完整的编译系统一定包含编译器和连接器两大功能部件。编译器要完成编译原闷尘理中提到的那些任务;连接器要把编译器生成的代码片段拼接成一个完整的可执行程序。之所以需要连接器,是因为一般的程序都是多源文件的,而编译器一次只编译一个源文件(称之为翻译单元translation unit),因此需要连接器把所有翻译单元对应的输出合并成一个可执行文件。
如果一切顺利,可执行程序就可以正确的生成出来。但是一旦源代码存在某些问题,错误就会被报告出来。编译器报告的错误一般都是局部错误,它会指明错误在哪个文件第几行;连接器报告的错误一般都是全局错误,而且绝大多数都是多胳膊少腿的问题,比如函数重定义,无法解决的外部符号等,这些错误无法定位到某一行。
GCC就是这里的编译器。准确来说,GCC是一个编译驱动器,驱动cc1、as和ld三个部件完成编译、汇编和连接的工作。cc1将C语言源文件编译为汇编文件(.s)。而将汇编代码转换为二进制指令的工作由AS完成,生成大家都很熟悉的对象文件(.o);生成的这些对象文件再由AR程序打包成静态库(.a),或者由LD程序连接成可执行程序(elf、.so或其他格式)。而LD就是所谓的连接器。AS、AR、LD是属于另外一个叫做binutils的软件包的程序,所以要让GCC能够有效运作起来,除了在系统中安装GCC外,还要安装binutils才行。
以下是cc1、as、ld各司其责的配合完成一个编译过程。

[plain] view plain
gcc test.c -S -o test.S
as test.S -o test.o
ld test.o -o test
通常所用的“gcc -c”就相当于“gcc -S” + as,而对于编译单个源文件一步到位生成可执行“gcc test.c -o test”相当于上面三个步骤的组合,中间文件被放置在临时目录下。从这一点看来,GCC除去编译的功能外,更像是个driver,它可以驱动as和ld完成整个的编译,特别是gcc也接受对象文件(.o)和静态库(.a)作为参数用于生成可执行程序,其实背后就是调用的LD,还可以用“-Wl,”选项给LD传递自定义参数。所以在大多数软件的Makefile里,你很难找到AS和LD的字眼,gcc已经给你包办了。
GCC源代码里包含的主要就是cc1这部分(还包括一些其他的辅助工具,比如collect2等)。

二、GCC的安装
要学习和修改GCC源码,首先第一步是在自己的机器上用GCC源代码编译出一个选定版本的GCC(这里以gcc-4.5.2.tar.bz2为例,源码可以从http://gcc.gnu.org去下载)。除此之外,GCC依赖于gmp、mpfr、mpc三个库,如果你机器上没有,或者版本太团罩雹老以至于无法支持新的GCC,那么你还得去把这三个库下载下来。
一般来说,下载GCC是从GNU的FTP镜像网站去下载,gcc的代码包一般放置在/release/gcc-x.y目录下,而那三个依赖库一般放置在/infrastructure/目录下。
1、把依赖库和GCC解包

[plain] view plain
tar -vjxf gmp-4.3.2.tar.bz2 -C /usr/src/
tar -vjxf mpfr-2.4.2.tar.bz2 -C /usr/src/
tar -vxf mpc-0.8.1.tar.gz -C /usr/src/
tar -vjxf gcc-4.5.2.tar.bz2 -C /usr/src/

2、到自己的home目录下编译依赖库

[plain] view plain
cd ~
mkdir gmp-build
cd gmp-build
/usr/src/gmp-4.3.2/configure --prefix=/usr/local/gmp-4.3.2 #指定安装位置
make
make check
make install

cd ~
mkdir mpfr-build
cd mpfr-build
/usr/src/mpfr-2.4.2/configure --prefix=/usr/local/mpfr-2.4.2 --with-gmp=/usr/local/gmp-4.3.2
make
make check
make install


cd ~
mkdir mpc-build
cd mpfr-build
/usr/src/mpc-0.8.1/configure --prefix=/usr/local/mpc-0.8.1 --with-mpfr=/usr/local/mpfr-2.4.2 --with-gmp=/usr/local/gmp-4.3.2
make
make check
make install

3、编译GCC

[plain] view plain
cd ~
mkdir gcc-build
cd gcc-build
/usr/src/gcc-4.5.2/configure --prefix=/usr/local/gcc-4.5.2 --with-mpc=/usr/local/mpc-0.8.1 --with-mpfr=/usr/local/mpfr-2.4.2 --with-gmp=/usr/local/gmp-4.3.2 --enable-languages=c,c++
make
make install

B. 开放源代码软件的主要种类

Shareware
共享软件。允许他人自由拷贝并收取合理注册费用。使用者可在软件规定的试用期限内免费试用,再决定注册购买与否。大部分共享版软件都有功能和时间限制,试用期通常分为7天、21天、30天不等。而有的共享软件还限制用户只能安装一次,若删除后重新安装将会失效。像Winzip、ACDSee等软件就是共享软件。
Demos/"Crippleware"
免费或低费用试用的软件,是商业软件的一部分,它没有自由可用的源码,没有支持,通常缺乏关键特征。
Bundled Software
它由商业软件携带并且不用增加额外的费用,但是它一般具有很有限的使用许可,没有自由可用的源码。例如:Microsoft Internet Explore. "Consortium-Ware": 源码由公司内部人员共享,但是对公众没有自由可用的源码。例如:Motif. "Non-commercial use only": 这是可以免费从Internet网下载的典型软件,甚至连同源码,但是同时它有严格的许可证限制它的使用。例如:1998年以前的Netscape的浏览器一些Open-source许可证类型
BSD(Berkeley Source Distribution)许可证:它要求版权和着者身份申明
GPL
通用公共许可证("CopyLeft")禁止派生或分发产品的限制。
LGPL
库通用许可证,它不同于GPL许可证,在这个许可证下,库(函数库)可以自由的联接到私有软件。
Artistic License
使作者保持对进一步开发的控制。
NPL(Netscape Public Lincense)
基于GPL精神的新的许可证,但是保持了对源码更多的控制和所有权(请看下面的“Netscape发展什么”这一节)
Public Domain/Not Copyrighted/No Restrictions: 通常用于决定性的算法以鼓励广泛使用,通常由美国政府使用。
Open-source 软件的一些例子
现在有几百种成熟的open-source产品被广泛使用。这而是一些最着名的:
Corncart
由OSIC信息技术有限公司最新开发的开源电子软件,集合之前所有电子开源软件的所有优点。目前尚处于二次开发阶段。
BSD UNⅨ
由California大学Berkeley分校开发的基于"BSD"许可证的软件。许多UNⅨ商业版本是直接基于BSD源码或者大多从它的设计中借用来的。
Linux: 它从一个芬兰的大学生的研究项目成长为近六年最流行的非Microsoft操作系统。最初它仅仅是为PCs机设计的,可现在它支持Palm Pilots(小型掌中平台),大型的64位Digital Alphas芯片的超级计算机,和在这两者之间的几乎任何事物。与传统操作系统相比它的效率更高,更可靠,更先进。它包括编译程序,库,和来自于FreeSoftware Foundation的各种工具,还有成千上万的open-source产品,Linux平台是一个小的但是却在快速成长的商业产业的基础,还是软件革新的温床。它由商业公司和散布在全世界的自由编程人员基于GPL所开发。
Perl语言
"Internet的传输带”,大多数web服务器的动态内容的基础,广泛用于脚本语言编程和自动化文档处理。它由Perl研究所基于Artistic 许可协议开发。
GCC
GNU C编译器是许多Unix平台上首选的C/C++编译器,也可以在其他平台上运行;因为支持几乎每种处理器,所以它也被作为一个跨平台的工具而广为流行;它由FSF基于GPL维护、开发。
X Window 系统
使用最广的非microsoft窗口系统,具有先进的跨平台远程执行特性,性能优良,灵活度高;由MIT和X Consortium在类BSD许可协议下开发;其他的增强功能由The XFree86 Project公司开发。
Internet 主干:
BIND: Berkeley Internet Name Daemon; 为几乎所有的Internet域名解析服务器使用,其行为如同一个分散全球的分布式数据库;由ISC(Internet Software Consortium)维护。
BSD SendMail: 邮件传输代理的最高标准。没有任何一家商业竞争者能和它匹敌,绝对安全、健壮;负责处理Internet上超过75%的邮件传输任务,包括象AOL这样的巨型站点---每天有数百万的消息。由SendMail公司基于BSD许可协议维护。
INN:InterNet新闻服务器,操纵Internet上的决大多数Usenet新闻还包括许多企业网。被ISC(BSD)所维护(BSD许可协议)。
Apache: 超过半数的web服务器的动力(远远超出Microsoft和Netscape加起来的数量),早在1998年用于超过百万的web服务器。由Apache组织开发(类BSD许可证维护)。
WU-FTPD: 在Internet网上最流行的FTP服务器,几乎使用于所有的FTP站点。最初是由Bryan O'Connor在Washington大学Louis大街开发的,现在被Academ Consulting Services和许多自愿者维护(BSD许可)。

C. 现在的IT行业特别是培训机构都有些什么套路

IT行业的高薪就业前景引发越来越多的人想要转行到这个领域,部分培训机构为抢夺生源可谓是无所不用其极,市场竞争催生了很多不正当竞争手段,虚假宣传成了很多机构的标配,霸哥在网络上看到过很多学员在IT培训机构受骗的案例,接下来整理分享给大家,给同学们敲个警钟。

1、真的“招聘”?

这是很多培训机构都会用到的招生手段之一,在各大招聘网站上发出IT相关岗位招聘信息,或是打电话邀约面试,最终去了之后机构的老师以“面试官”的身份对学员进行技术拷问,不断贬低学员的知识水平、贬低学员的职业规划、攻破学员的心理防线,让学生怀疑自己的个人能力。在学员心灰意冷的时候,“面试官”开始吹捧培训学习的重要性与好处,动摇学生的念头。让学员仿佛抓住了救命稻草一般心甘情愿参加培训,机构的目的也就达到了。

在网站上随便搜一下,就会找到很多这样的招聘内容,比如:

所以各位同学在师资考察这块一定要看到能够证明师资的资料才可以,否则一切都是乱扯!

5、就业真的“保险”?

就业保险是从2017年下半年才出现的套路,指的是学员除学费外还要再单独交200元的保险费,学员在培训结束后,由机构推荐就业,如果在1—2个月未能就业,学校将免费提供课程,让学员再次免费学习,二次学习后,学员仍没有找到工作的,保险公司将按比例或全额赔付学费,表面上看学员的风险基本为零,其实这只是培训机构宣传的噱头。

理由很简单,培训机构给你推荐具体一份工作,只要和IT相关,工作内容和薪资即便再和你期望不符,培训机构已经按合同完成了培训和推荐责任,保险的责任也就相应结束了。不管你后来是被辞还是自辞,保险公司都不会再赔你钱了,这点套路大家一定要搞清楚。

所以对于就业保险这件事,只是培训机构为了招生而使用的手段之一,大家一定要有自己的判断。

D. 如何查看大型工程的源代码

程序员在工作过程中,会遇到很多需要阅读源码的场景,比如技术预研、选择技术框架、接手以前的项目、review他人的代码、维护老产品等等。可以说,阅读源代码是程序员的基本功,这项基本功是否扎实,会在很大程度上影响一个程序员在技术上的成长速度。2014年写《Qt on Android核心编程》和《Qt Quick核心编程》时,很多内容都是通过分析Qt源码搞明白的。这阵子研究CEF和PPAPI,也主要靠研究源代码来搞明白用法。最近工作上要修改已有项目的一个子系统,也是得硬着头皮先读懂代码。总之在开发工作这十来年中,读过太多源码了,从源代码中学习到太多东西了,如果不阅读源代码,真不知道自己能否成长起来。写代码是从模仿开始的,提高也是从观摩别人的优秀设计和代码开始的。所以阅读源码至关重要,接下来咱从下列方面聊聊阅读源码的事儿。不同的目的会有不同的心情,会影响到工作的进展,像修复他人的Bug这种事情,类似于没被掰弯的男猿捏着鼻子给另外一个男人擦屁股,是很恶心的,很容易让人拒绝的。所以因这种目标而阅读源码,往往是欲拒还迎、欲说还休,效率较低。然而修复实际工作中帮别人修复Bug这种情形,十有八九你要遇到,无可逃避。所以,心理调试很重要。为了学习去读源码,这是最愉快的最放松的。不过提醒一点,设定可检验的目标才会有收获,否则就会像走到大街上看见一美女擦肩而过那样,惊艳一下下,过后嘛关系嘛收获也没了。其他的目的,重构旧代码、添加新功能,比帮别人擦沟子(陕西话,屁股)略强,因为他带有创造性,创造性的活动能给人带来强烈的愉悦,所以虽然这两种目的也有很多让人不爽的部分,不过想到我可以让一棵老树焕发青春,不爽也就慢慢弱下去了。

热点内容
编程反向 发布:2025-03-03 05:39:19 浏览:797
imac买什么配置打游戏 发布:2025-03-03 05:26:45 浏览:874
选择存储器需要考虑最重要的参数 发布:2025-03-03 05:05:25 浏览:365
flushjava 发布:2025-03-03 04:27:01 浏览:932
如何快速打开文件夹 发布:2025-03-03 04:25:01 浏览:537
reaxys数据库 发布:2025-03-03 04:17:33 浏览:511
视频缓存合并报错 发布:2025-03-03 03:51:10 浏览:805
vivi编译 发布:2025-03-03 03:45:18 浏览:695
访问什么意思 发布:2025-03-03 03:44:43 浏览:116
javac与java 发布:2025-03-03 03:35:37 浏览:804