gcc的编程遇到的问题问题

&gcc编译器
开通极客学院VIP会员,免费观看全站课程
最低 21.6 元 / 月
VIP会员尊享特权
观看全部课程
720P高清视频下载(年会员专享)
已有会员账号,请
视频太卡?试试切换线路
本课时学习vi的操作思想,vi的使用方式,以及快速编写代码。学完本课时,我们可以灵活、快速使用vi文本编辑器编写代码和配置系统等。
本课时通过学习编译步骤以及gcc的基本使用,让大家更清晰理解编译原理,能熟练使用gcc快速生成特定的目标成果物,可以为将来的调试做准备。
本课时学习调试思想、调试方法,以及gdb的基本使用。通过本课时学习,我们可以更快的定位错误,解决程序中存在的问题,提高代码的整体质量。
只有成为VIP会员才能提问&回复,快吧!如果你还没有账号你可以一个账号。
添加新技术问题
课程 [gcc编译器]
中已存在问题
添加新技术问题
问题描述越详细,被解答的速度越快
有新回答时请邮件提醒我
着急,拜托快点
不急,慢慢解决
关联课程 [gcc编译器]
正在读取中...
正在读取中... 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
GCC编程与开发总结报告
下载积分:100
内容提示:在虚拟机下基于Linux操作系统的GCC编程与开发技术
文档格式:PDF|
浏览次数:40|
上传日期: 09:44:13|
文档星级:
该用户还上传了这些文档
GCC编程与开发总结报告
官方公共微信<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&随笔 - 687&
文章 - 8&评论 - 795&trackbacks - 19
在Linux环境下,我们通常用gcc将C代码编译成可执行文件,如下就是一个简单的例子:
代码文件:hello.c
&stdlib.h&
void main(void)
printf("hello world!\r\n");
可以通过如下指令来编译出一个可执行文件:
gcc hello.c
执行完该命令后,就会得到一个a.out的可执行文件。
编译的过程
前面的例子只是简单的介绍了一下gcc的使用方法,熟悉c编程的朋友就会知道,该步骤其实包含了预处理--&编译--&汇编--&链接四步,这四步分别实现的功能如下:
预处理阶段:主要处理源文件中的#ifdef、 #include和#define命令,展开宏、读取定义的符号等。
编译阶段:检查代码的规范性,把代码翻译成汇编语言
汇编阶段:是把编译阶段生成的".s"文件转成二进制目标代码
链接阶段:将汇编阶段生成的机器码汇集成一个可执行的二进制代码文件
由此可以看出,每一个阶段的输出其实就是下一个阶段的输入,用gcc是可以单独执行这四步的:
gcc -E hello.c -o hello.i
gcc -S hello.i -o hello.s
gcc -c hello.s -o hello.o
gcc hello.o -o hello.exe
实际上,由于这四个步骤太过于复杂,往往可以像我上面那样全部集中到一个命令中来执行:
gcc hello.c
-o hello.exe
这里我加了一个-o参数来指定输出名称,而不是默认的a.out。
如果有多个文件,则可以通过如下方式全部集中起来。
gcc -o test
first.c second.c third.c
这个全生成的方式虽然非常简单,但是存在的一个问题就是:当项目较大时,如果只改了一个文件,仍需要重新编译索引文件。
为了解决这个问题,我们往往把这个编译过程拆分成两步:
将各个.c文件分别编译成.o文件
将所有.o文件链接成执行文件
gcc –c first.c
gcc –c second.c
gcc –c third.c
gcc -o test first.o second.o third.o
这样,当third.c文件发生改变时,只需要重新编译third.c和链接即可,这样就省去了未变化文件的编译时间,也就是我们通常所说的增量编译。
gcc –c third.c
gcc -o test first.o second.o third.o
从上面的使用方法中我们也可以看到:
当使用-c参数时,若输入文件时.c则会同时执行执行了预处理、编译、汇编三个阶段,直接生成.o文件。
输入文件为.o时,可以直接执行链接操作
由于程序员往往并不关心前面两个几个阶段生成的输出文件,通常我们也把预处理、编译、汇编三个阶段合并在一起,统称为编译,输入.c,生成.o。
常用参数:
前面其实已经演示过-E、–S、–c、–o等几个参数的用法,其中-E及-S很少会用到,-c用于编译生成.o文件,-o用于指定输出文件名称。除了这几个生成控制的参数外,还有许多参数设置,这里主要介绍一下几个常用的:
包含头文件和库:
-Idir: 指定编译查找头文件的目录,常用于查找第三方的库的头文件,例:gcc test.c –I../inc -o test。
-Ldir : 指定链接时查找lib的目录,常用于查找第三方库。
-llibrary :
指定额外链接的lib库
以字符串"1"(默认值)定义 MACRO 宏。
-DMACRO=DEFN
以字符串"DEFN"定义MACRO 宏,注意中间不能有空格。
取消对 MACRO 宏的定义。
调试和可执行文件形式:
指示编译器,在编译的时产生调试信息。
尽可能的生成gdb的可以使用的调试信息(比-g生成的信息更多些)。
禁止使用动态库,编译得到的程序会比较大,但可以自由运行。
尽量使用动态库,所以生成文件比较小,但是需要系统由动态库。
告警选项:
产生尽可能多的警告信息,建议始终带上
将所有的警告当成错误进行处理
除了gcc编译器外,还有另外一个编译器g++,很多人往往搞不清楚这两个编译器的区别,很多人望文生义的认为gcc只能编c代码,g++只能编c++代码。实际上这两个编译器的主要区别如下:
后缀为.c的,gcc把它当作是C程序,而g++当作是c++程序来编译
链接的时候gcc不会默认加上-lstdc++选项(g++会),而我们往往又没有手动加这个选项的习惯,则导致gcc编c++代码时,用到了stl库时会出现链接失败。
关于它们的区别的更多信息,可以参考这个文章:
为了使用简单,可以制定如下规则:对c项目使用gcc,对c++项目使用g++。估计当时设计这个名字的意图也是如此吧。
阅读(...) 评论()新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
UID空间积分0 积分205阅读权限20帖子精华可用积分205 信誉积分737 专家积分0 在线时间675 小时注册时间最后登录
稍有积蓄, 积分 205, 距离下一级还需 295 积分
帖子主题精华可用积分205 信誉积分737 专家积分0 在线时间675 小时注册时间最后登录
论坛徽章:0
看到书上有一些gcc命令,格式如下:
1. gcc -c test.c (从右开始生成test.o)
2. gcc -o test test.c (从右向左,生成文件test)
3. gcc -c test.i -o test.o (从左向右,生成test.o)
4. gcc test.o -o test (从左向右,生成test)
请问,gcc命令的“源文件”和“目标文件”的位置顺序应该是怎样的?求教,谢谢!
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
UID空间积分0 积分5160阅读权限100帖子精华可用积分5160 信誉积分1975 专家积分10 在线时间2242 小时注册时间最后登录
帖子主题精华可用积分5160 信誉积分1975 专家积分10 在线时间2242 小时注册时间最后登录
认证徽章论坛徽章:1
。。。。跟参数及 参数位置有关
UID空间积分0 积分205阅读权限20帖子精华可用积分205 信誉积分737 专家积分0 在线时间675 小时注册时间最后登录
稍有积蓄, 积分 205, 距离下一级还需 295 积分
帖子主题精华可用积分205 信誉积分737 专家积分0 在线时间675 小时注册时间最后登录
论坛徽章:0
。。。。跟参数及 参数位置有关
crazyhadoop 发表于
您的意思是说,这个位置可以随意,文件的位置跟随编译参数(比如-c)的位置就可以了?是这样吗?
UID空间积分0 积分5160阅读权限100帖子精华可用积分5160 信誉积分1975 专家积分10 在线时间2242 小时注册时间最后登录
帖子主题精华可用积分5160 信誉积分1975 专家积分10 在线时间2242 小时注册时间最后登录
认证徽章论坛徽章:1
walterpeng
UID空间积分0 积分3阅读权限10帖子精华可用积分3 信誉积分100 专家积分0 在线时间60 小时注册时间最后登录
白手起家, 积分 3, 距离下一级还需 197 积分
帖子主题精华可用积分3 信誉积分100 专家积分0 在线时间60 小时注册时间最后登录
论坛徽章:0
man一下你就知道了,man在linux下可是一个非常好的 帮助文档,要好好用它哦,呵呵
UID空间积分0 积分23阅读权限10帖子精华可用积分23 信誉积分134 专家积分0 在线时间10 小时注册时间最后登录
白手起家, 积分 23, 距离下一级还需 177 积分
帖子主题精华可用积分23 信誉积分134 专家积分0 在线时间10 小时注册时间最后登录
论坛徽章:0
-o 选项指定生成的文件名
UID空间积分0 积分29阅读权限10帖子精华可用积分29 信誉积分102 专家积分5 在线时间14 小时注册时间最后登录
白手起家, 积分 29, 距离下一级还需 171 积分
帖子主题精华可用积分29 信誉积分102 专家积分5 在线时间14 小时注册时间最后登录
论坛徽章:0
-c -o 都是选项,后面的.o 和目标文件都是选项参数,只要对应的选项参数跟在选项后面就可以了,选项之间的顺序是没有关系的。。。
北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:
广播电视节目制作经营许可证(京) 字第1234号
中国互联网协会会员&&联系我们:
感谢所有关心和支持过ChinaUnix的朋友们
转载本站内容请注明原作者名及出处}

我要回帖

更多关于 编程遇到的问题 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信