天池新人入门教程实战赛之怎么使用开发平台

天极传媒:天极网全国分站
您现在的位置:
& &&Linux下的C编程实战之开发平台搭建
Linux下的C编程实战之开发平台搭建天极网软件频道 11:21
  1.引言  Linux在领域的和普及已经有较长的历史,这源于它的开源特点以及其超越Windows的安全性和稳定性。而近年来,Linux操作系统在嵌入式系统领域的延伸也可谓是如日中天,许多版本的嵌入式Linux系统被开发出来,如ucLinux、RTLinux、ARM-Linux等等。在嵌入式操作系统方面,Linux的地位是不容怀疑的,它开源、它包含协议栈、它易集成GUI。  鉴于Linux操作系统在服务器和嵌入式系统领域愈来愈广泛的应用,社会上越来越需要基于Linux操作系统进行编程的开发人员。  浏览许多论坛,经常碰到这样的提问:“现在是不是很流行unix/linux下的c编程?所以想学习一下!但是不知道该从何学起,如何下手!有什么好的建议吗?各位高手!哪些书籍比较合适初学者?在深入浅出的过程中应该看哪些不同层次的书?比如好的网站、论坛请大家赐教!不慎感激!”  鉴于读者的需求,在本文中,笔者将对Linux平台下C编程的几个方面进行实例讲解,并力求回答读者们关心的问题,以与读者朋友们进行交流,共同提高。在本文的连载过程中,有任何问题或建议,您可以给笔者发送email:,您也可以进入笔者的博客参与讨论:/21cnbao。  笔者建议在PC足够大的情况下,不要直接安装Linux操作系统,最好把它安装在运行VMWare虚拟机软件的Windows平台上,如下图:
  在Linux平台下,可用任意一个文本编辑工具编辑,但笔者建议使用emacs软件,它具备语法高亮、版本控制等附带功能,如下图:
  2.GCC编译器  GCC是Linux平台下最重要的开发工具,它是GNU的C和C++编译器,其基本用法为:gcc [options] [filenames]  options为编译选项,GCC总共提供的编译选项超过100个,但只有少数几个会被频繁使用,我们仅对几个常用选项进行介绍。  假设我们编译一输出“Hello World”的程序:
/* Filename:helloworld.c */main(){printf("Hello World\n");}  最简单的编译方法是不指定任何编译选项:gcc helloworld.c  它会为目标程序生成默认的文件名a.out,我们可用-o编译选项来为将产生的可执行文件指定一个文件名来代替a.out。例如,将上述名为helloworld.c的C程序编译为名叫helloworld的可执行文件,需要输入如下命令:gcc Co helloworld helloworld.c  -c选项告诉GCC仅把源代码编译为目标代码而跳过汇编和连接的步骤;  -S 编译选项告诉GCC 在为 C代码产生了汇编语言文件后停止编译。GCC 产生的汇编语言文件的缺省扩展名是.s,上述程序运行如下命令:gcc CS helloworld.c   将生成helloworld.c的汇编代码,使用的是AT&T汇编。用emacs打开汇编代码如下图:
  -E选项指示编译器仅对输入文件进行预处理。当这个选项被使用时,预处理器的输出被送到标准输出(默认为屏幕)而不是储存在文件里。  -O选项告诉GCC对源代码进行基本优化从而使得程序执行地更快;而-O2选项告诉GCC产生尽可能小和尽可能快的代码。使用-O2选项编译的速度比使用-O时慢,但产生的代码执行速度会更快。  -g选项告诉GCC产生能被GNU调试器使用的调试信息以便调试你的程序,可喜的是,在GCC里,我们能联用-g和-O (产生优化代码)。  -pg选项告诉GCC在你的程序里加入额外的代码,执行时,产生gprof用的剖析信息以显示你的程序的耗时情况。  3.GDB调试器  GCC用于编译程序,而Linux的另一个GNU工具gdb则用于调试程序。gdb是一个用来调试C和C++程序的强力调试器,我们能通过它进行一系列调试工作,包括设置断点、观查变量、单步等。其最常用的命令如下:  file:装入想要调试的可执行文件。   :终止正在调试的程序。   list:列表显示源代码。   next:执行一行源代码但不进入函数内部。   step:执行一行源代码而且进入函数内部。   run:执行当前被调试的程序   quit:终止gdb  watch:监视一个变量的值   break:在代码里设置断点,程序执行到这里时挂起   make:不退出gdb而重新产生可执行文件  shell:不离开gdb而执行shell  下面我们来演示怎样用GDB来调试一个求0+1+2+3+…+99的程序:
/* Filename:sum.c */main(){int i, sum = 0;for (i = 0; i & 100; i++){sum + =}printf("the sum of 1+2+...+ is %d", sum);}  执行如下命令编译sum.c(加-g选项产生debug信息):gcc Cg Co sum sum.c  在命令行上键入gdb sum并按回车键就可以开始调试sum了,再运行run命令执行sum,屏幕上将看到如下内容:  list命令:  list命令用于列出源代码,对上述程序两次运行list,将出现如下画面(源代码被标行号):  根据列出的源程序,如果我们将断点设置在第5行,只需在gdb 命令行提示符下键入如下命令设置断点:(gdb) break 5,执行情况如下图:  这个时候我们再run,程序会停止在第5行,如下图:  设置断点的另一种语法是 break &function&,它在进入指定函数(function)时停住。  相反的,clear用于清除所有的已定义的断点,clear &function&清除设置在函数上的断点, clear &linenum&则清除设置在指定行上的断点。  watch命令:     watch命令用于观查变量或表达式的值,我们观查sum变量只需要运行watch sum:   watch &expr&为表达式(变量)expr设置一个观察点,一量表达式值有变化时,程序会停止执行。  要观查当前设置的watch,可以使用info watchpoints命令。  next、step命令:   next、step用于单步执行,在执行的过程中,被watch变量的变化情况将实时呈现(分别显示Old value和New value),如下图:   next、step命令的区别在于step遇到函数调用,会跳转到到该函数定义的开始行去执行,而next则不进入到函数内部,它把函数调用语句当作一条普通语句执行。  4.Make  make是所有想在Linux系统上编程的用户必须掌握的工具,对于任何稍具规模的程序,我们都会使用到make,几乎可以说不使用make的程序不具备任何实用价值。  在此,我们有必要解释编译和连接的区别。编译器使用源码文件来产生某种形式的目标文件(object files),在编译过程中,外部的符号参考并没有被解释或替换(即外部全局变量和函数并没有被找到)。因此,在编译阶段所报的错误一般都是语法错误。而连接器则用于连接目标文件和程序包,生成一个可执行程序。在连接阶段,一个目标文件中对别的文件中的符号的参考被解释,如果有符号不能找到,会报告连接错误。  编译和连接的一般步骤是:第一阶段把源文件一个一个的编译成目标文件,第二阶段把所有的目标文件加上需要的程序包连接成一个可执行文件。这样的过程很痛苦,我们需要使用大量的gcc命令。  而make则使我们从大量源文件的编译和连接工作中解放出来,综合为一步完成。GNU Make的主要工作是读进一个文本文件,称为makefile。这个文件记录了哪些文件(目的文件,目的文件不一定是最后的可执行程序,它可以是任何一种文件)由哪些文件(依靠文件)产生,用什么命令来产生。Make依靠此makefile中的信息检查磁盘上的文件,如果目的文件的创建或修改时间比它的一个依靠文件旧的话,make就执行相应的命令,以便更新目的文件。  假设我们写下如下的三个文件,add.h用于声明add函数,add.c提供两个整数相加的函数体,而main.c中调用add函数:
/* filename:add.h */extern int add(int i, int j);/* filename:add.c */int add(int i, int j){return i +}/* filename:main.c */#include "add.h"main(){int a,a = 2;b = 3;printf("the sum of a+b is %d", add(a + b));}  怎样为上述三个文件产生makefile呢?如下:
test : main.o add.ogcc main.o add.o -o testmain.o : main.c add.hgcc -c main.c -o main.oadd.o : add.c add.hgcc -c add.c -o add.o   上述makefile利用add.c和add.h文件执行gcc -c add.c -o add.o命令产生add.o目标代码,利用main.c和add.h文件执行gcc -c main.c -o main.o命令产生main.o目标代码,最后利用main.o和add.o文件(两个模块的目标代码)执行gcc main.o add.o -o test命令产生可执行文件test。  我们可在makefile中加入变量,另外。环境变量在make过程中也被解释成make的变量。这些变量是大小写敏感的,一般使用大写字母。Make变量可以做很多事情,例如:  i) 存储一个文件名列表;   ii) 存储可执行文件名;   iii) 存储编译器选项。   要定义一个变量,只需要在一行的开始写下这个变量的名字,后面跟一个=号,再跟变量的值。引用变量的方法是写一个$符号,后面跟(变量名)。我们把前面的 makefile 利用变量重写一遍(并假设使用-Wall -O Cg编译选项):
OBJS = main.o add.o CC = gcc CFLAGS = -Wall -O -gtest : $(OBJS)$(CC) $(OBJS) -o testmain.o : main.c add.h$(CC) $(CFLAGS) -c main.c -o main.o add.o : add.c add.h $(CC) $(CFLAGS) -c add.c -o add.o   makefile 中还可定义清除(clean)目标,可用来清除编译过程中产生的中间文件,例如在上述makefile文件中添加下列代码:
clean: rm -f *.o  运行make clean时,将执行rm -f *.o命令,删除所有编译过程中产生的中间文件。  不管怎么说,自己动手编写makefile仍然是很复杂和烦琐的,而且很容易出错。因此,GNU也为我们提供了Automake和Autoconf来辅助快速自动产生makefile,读者可以参阅相关资料。  5.小结  本章主要阐述了Linux程序的编写、编译、调试方法及make,实际上就是引导读者学习怎样在Linux下编程,为后续章节做好准备。
(作者:宋宝华责任编辑:方舟)
欢迎在新浪微博上关注我们
办公软件IT新闻整机天池新人实战里面排名53的 dhc05_西北工业大学吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:151,672贴子:
天池新人实战里面排名53的 dhc05收藏
看到的回复下。dhc05
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或您现在的位置:
/ 招聘信息
阿里巴巴天池大数据竞赛,百万大奖寻找数据英雄
点击次数 1719
阿里巴巴天池大数据竞赛,百万大奖寻找数据英雄
为了推动数据人才的培养,开启数据和计算潜能储备力量,2014年,阿里巴巴集团推出天池大数据科研平台,让无法接触到大数据的人,能够触碰到企业级的大数据,是我们的使命。
2015,天池大数据竞赛共吸引到全球超过40个国家和地区,22858支队伍,25592位选手报名参赛。
2016,天池大赛推出&数字娱乐、互联网物流、O2O等热门领域&算法竞赛,并将拓宽领域边界,涵盖&数据可视化&和&程序设计&大赛,不一样的赛题,期待一样牛的你!
开启大数据之旅:
2016天池赛事直击
2016天池大数据竞赛,我们有针对刚刚进入数据挖掘领域的新人而定制的新人实战赛;有老选手最爱:经典但又有所创新的算法大赛;有和顶级国际会议合作的高端赛事;还有面向全新领域的可视化大赛、编程设计大赛……
了解详情:
―――――――― 菜鸟-需求预测与分仓规划大赛 ――――――――
竞赛时间:4月18日-6月19日
奖金池:33万元
激励:天池高端定制礼品、阿里校招绿色通道、人才认证
大数据赋能电商仓配网络
1、供应链物流领域的全新”互联网+”挑战;2&、海量商业数据(买家购物行为等)在DT时代的算法应用实践;3&、近距离接触互联网DT技术对线下传统物流流程的促进和改造。
―――――――― 阿里音乐流行趋势预测大赛 ――――――――
竞赛时间:5月17日-7月15日
奖金池:38万元
激励:天池高端定制礼品、阿里校招绿色通道、人才认证
下一个当红艺人是who?不看颜值看数据!
经过7年的发展与沉淀,目前阿里音乐拥有数百万的曲库资源,及数亿的人次的用户试听、收藏等行为。本次大赛以阿里音乐用户的历史播放数据为基础,期望参赛者可以通过对阿里音乐平台上每个阶段艺人的试听量的预测,挖掘出即将成为潮流的艺人,从而实现对一个时间段内音乐流行趋势的准确把控。
―――――――― 天池新人实战赛 ――――――――
竞赛时间:长期开放,提供永久排行榜
激励:天池高端定制礼品&人才认证
天池新人实战赛是针对数据新人开设的实战练习专场,以经典赛题作为学习场景,提供详尽入门教程,手把手教你学习数据挖掘。天池希望新人赛能成为高校备受热捧的数据实战课程,帮助更多学生掌握数据技能。
―――――――― 更多比赛详情请见天池官网 ――――――――
Copyright 2005 GUCAS All Rights Reserved
中国科学院大学版权所有&&技术支持:网络信息中心

我要回帖

更多关于 天池新人赛 的文章

 

随机推荐