欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Linux下gcc编译c源程序

程序员文章站 2022-06-04 12:37:01
...

$ cat hello1.c

如果已经有hello1.c则将hello1.c的文件内容显示在屏幕上,否则给出提示没有此文件。

$ cat 单独输入cat会将后面所有的按键输出到屏幕上面,退出cat按Ctrl+C键。

$vi hello1.c 进入VIM,没有hello1.c则创建此文件。

按dd删除光标所在行,按x删除光标所在字符$光标定位到行尾,d$删除光标所在字符到行尾所有字符按i进入插入模式,a进入附加模式,

hello1.c中输入

#include <stdio.h>
main()
{
    int r;
    printf("Enter an integer,please!\n");
    scanf("%d",&r);
    square(r);
    return 0;
}
输入gcc hello1.c会提示没有定义square.,所以不带gcc的选项进行编译是不行的。ESC进入VI命令模式

#include <stdio.h>
int square(int x)
{
    printf("The square=%d\n",x*x);
    return (x*x);
}

分别编译hello1.c 和hello2.c

$gcc -c hello1.c

$gcc -c hello2.c

$gcc hello1.o hello2.o -o hello

$./hello.out

如果在终端shell下直接输入$hello,会提示没有此命令,因为此时shell以为你输入的是shell命令,而hello并不是shell的命令,而是你自己写的程序。

要想执行自己写的程序,有两种办法,一是cd到程序所在的目录,执行:. /hello,,另一种就是:(路径名)/hello。

gcc的 -c格式只生成目标文件,不进行连接,用于对原文件的分别编译,生成.o目标文件。

gcc的 -o file选项格式将输出放在文件file中。如果未使用该项,则可执行文件放在a.out中。


如果hello1.c中有

#include “hello3.h”

而hello3.h又不在当前目录和标准目录中,比如在/tmp下,则可以如下编译

$gcc -I /tmp hello1.c

假如hello1.c中使用了某宏比如MAC而并没有定义该宏,键入要#define MAC “test”可以如下编译

$gcc -I /tmp -D MAC=' "test" " -E hello1.c

-D name 定义一个宏,其值为1

-D name=definition定义一个宏name,指定值为definition,作用等价于在源文件中#define name definition,但-D选项比宏定义优先级高。

-I dir指定搜索头文件的路径dir。

-E 只对指定的源文件进行预处理,不做编译,生成的结果送到标准输出。

gcc优化程序常用选项
选项格式 功能
-O
-O1
试图减少代码大小和执行时间,但并不执行需要花费大量编译时间的任何优化
-O2 在-O1级别的优化之上,还进行一些额外调整工作——除不做循环展开、函数内联、和寄存器重新命名外,几乎进行所有可选优化
-O3 除了完成所有-O2级别的优化之外,还进行包括循环展开和其他一些与处理器特性相关的优化工作
-O0 不执行优化
-Os 具有-O2级别的优化,同时并不特别增加代码大小