程序员的开始总是从hello world开始的,这次在linux下编写c程序,也同样是从hello world开始。
我使用的是CentOS6.4。要编写c程序,gcc是必备的,emacs也是大部分人首选的。如果安装的是CentOS6.4的完整包,gcc和emacs已经带上了。
本以为是很容易就可以编写第一个hello world的,可是实际写的时候,发现代码是很快就OK了,但编译的时候遇到了各种问题。下面先来简述一下步骤。
1.启动emacs
右键->在终端中打开->输入emacs->回车。打开emacs,如下图。
2.新建helloworld
我建了一个helloworld的文件夹,然后在里面建了个hello.c的文件,再用emacs打开。当然这一过程也可以使用命令来完成。不过,界面操作相对简单,也不易出错。
输入了一段helloworld的代码,如下图
3.编译helloworld
(1)在emac中按下Alt+X,这时emac下方会显示如下画面
(2)在M-x 后面的光标中输入eshell->回车,弹出如下画面。
(3)输入gcc hello.c -o hello,按回车后编译,如果成功,将出现如下画面。
命令行进入新的一行,同时在hellowrold文件夹下多了一个hello的文件。
(4)执行hello。在命令行中输入./hello,按下回车,输出helloworld。如下图。
如果一切顺利,是应该这样的,但是我却没有那么顺利,中间遇到了几个问题,总结如下。
问题1:输出的文件不是hello
按照流程,在写了一段hello.c的代码后,就是gcc编译了,可是编译出的文件不是hello,而是a.out。后面发现,原来是少了-o的选项,就是gcc hello.c -o hello中的-o选项,这个-o表示指定输出的名字,如果不指定,系统会默认给出一个,这样对后续的操作不太友好。
问题2:在执行./hello时,提示权限不够
在用gcc编译出来后,虽然得到了hello,但是在执行./hello却提示权限不够,试了很多方法,还是权限不够。最后实在想不出更好的方法了,于是直接改了用户的权限为root权限,当然启用root来登陆也是可以的。只是我VM下用root用户登陆时,总会莫名其妙的出错,具体原因还有待进一步调查。后面就采用了提升当前用户权限的做法,如果不知怎么提升的,可以参见该文。
问题3:gcc hello.c编译进报错
在使用gcc hello.c时报错,提示没有main函数、没有printf函数等,后来查了下,说是要增加-c的选项,即gcc -c hello.c。这样是编译出来了,但是执行时又提示出错:不是可执行的二进制文件。后来我改了用户权限后再进来,再用gcc hello.c时就不再报错了。这个问题的原因还不清楚。