gcc 常用命令和参数

.h           //C/C++头文件

.c           //C的源文件

.cc         //C++ 的源文件

.cpp      //C++ 的源文件

.cxx       //C++ 的源文件

.i           //gcc 编译的过程文件 使用 -save-temps 即可以保留过编译过程文件,用于分析编译过程

.s         //汇编文件,gcc 编译的过程文件 使用 -save-temps 即可以保留过编译过程文件,用于分析编译过程

.a         //LINUX 下的静态文件在WINDOWS下为".lib"

.o         //.obj文件 多个时,连接顺序从左到右搜索,gcc对同类型的文件连接时不区分顺序,GCC在连接时不同类型,需要区分顺序,遵守从左到右的顺序。
.so      //share object ,动态库文件,在WINDOW下为"DLL"

 

文件编译顺序:

.c文件编译产生对应的.o文件,.o文件可以产生.a或.so文件。

 

eg:

     gcc   -c    xxx.c  //产生xxx.o

    对ar命令可以产生.a文件

    ar cr libxxx.a xxx.o

    如果有多个.o来生成.a可以在后面空格隔开追回更多文件。

    ar t libname.a 

   查看有多少个.o来生成的.a文件

    gcc  -shared -fpic xxx.o yyyy.o -o  liblastfile.so

 

GCC编译时警告开关

        -Wall  //是警告的集合,详细包括:

              -Wcomment(注释是否嵌套) 

              -Wformat(printf,scanf格式)

              -Wunused(没有使用的变量)

              -Wimplicit(没有实现)

              -Wreturn-type(没有返回值)

     eg:

          gcc -Wall -c  xxx.c


       -o   (小写)//output  指定输出文件名。

      eg:

          gcc   -Wall -c xxx.c  -o yyy

      -v    (小写)//Verbose   打印详细编译信息

       eg:

           gcc -v -Wall hello.c  
     

       -save-temps  把编译历史保存下来,供分析,产生.i,.s文件

      eg:

            gcc   -Wall  -save-temps xxxx.c

 

       -I    //用于连接头文件路径 读"哎"

       eg:

             gcc  -Wall xxx.c  -Iinclude -Llib //在xxx.c目录下有一个include放有xxx.h头文件,在lib文件夹下放库文件如.a

       -L   //(连接库路径) 用于对指定的路库路径进行搜索 最常见的是 "-L."其中的"."表示在当前目录

       eg:

            gcc -Wall xxx.c  -Iinclude -Llib

       -l    //链接link 用于对库文件的链接,常见的库为libNAME.a 或libNAME.so,用于连接时,-lNAME

       eg:

           gcc  xxx.o  -lm  -o out

     -D 定义或使用宏-DNAME  或 -DNAME=VALUE

       eg:

           如源文件中用到一个宏为DF,但又没有声明哪么在使用的时候如果没有指定宏就会报错哪么可以使用这个-D来进行编译时声明

          gcc  -Wall -c  -DDF xxx.c 或gcc -Wall -c -DDF="abc" xxxx.c

 

       -E  查看预处理过程

      -O 优化开关 级别有0-3

         eg:

              gcc -Wall -c -O2 xxx.c

 

      更多命令查看gcc   --help

 

其它Linux指令:

Bash shell的命令行交互中可以输入很多命令运行。例如:

命令

说明

 

命令

说明

touch

新建文件

 

cmd

切换到windows控制台,可以运行windows程序

rm

删除文件

 

--help

参数,显示命令帮助

mkdir

新建目录

 

man

显示命令帮助

rmdir

删除目录

 

info

显示命令更详细帮助

ls

显示文件和目录

 

ps

显示进程

cd

改当前目录 cd /

 

echo

输出变量值,echo $PATH

cp

复制文件

 

find

查找文件

mv

移动文件

 

diff

比较文件差异

查看命令帮助文档时,按 Ctrl+Z Ctrl+C 退出命令

 

cat  指令:用于查看文件

eg:

      cat   -n  xxx.c  其中-n 用来显示行号

 

ldd 指令:用于查看可执行文件有哪些动态库依赖。

eg:

    ldd   xxxx

 

which  指令:用于查看指令本身所在库的目录

eg:

    which gcc

    显示  /usr/bin/gcc

ll指令:列出文件列表

eg:

    ll /usr/lib/*.a 列出文件

 

pwd: 显示当前所在目录

当出现乱码时可以指定显示的语言

export LANG = C

 

evn 指令:显示当前用户的环境变量

eg:

     evn | grep LIB  //查看LIB开头的环境变量

 

su指令:

su 就是换到超级管理员操作

su- 就是指定切换到某个用户

 

cpp 指令:

cpp -dM   /dev/null 查看宏

cpp 预处理

 

time 指令: 查看执行时间

eg:

       time  xxxx 其中xxxx为可执行程序名

 

 


GCC 编译时连接第三方头文件或库文件时指定搜索路径

经常在编译时产生ld:cannot fine xxx。或没有找到文件,大多情况下是因为没有正确找到库或头文件所致。

 

一、系统默路径搜索法。

//系统缺省头文件
/usr/local/include/
/usr/include/

系统缺省库文件
/usr/local/lib/
/usr/lib/

上面这几个是安装好之后缺省的头文件和库文件路径。里面放的是系统需要的头文件和库文件,如果我们使用第三方库时,也所以把第三方的库文件和头文件考过来,但这样做,日积月累就会有很多第三方的垃圾库。为了保证干净,使用环境变量和-I及-L参数进行动态设置。

 

二、环境变量法。

环境变量:可以查看(.bash_profile文件)

下面几个是常使用的命名环境变量(当然可以按个人习惯来命名)
C_INCLUDE_PATH
CPLUS_INCLUDE_PATH
LIBRARY_PATH
LD_LIBRARY_PATH

 

可以设置多个环境变量,每个环境变量之间用“:”号隔开,如:

export  DIR1:DIR2:...

注意在指定环境变量时,尽量以追回的方式,以免复盖了别人的值。

eg:

export LIBRARY_PATH=/home/xxx    //不推荐,因为这样有可能把这个变量从些就设置为/home/xxx

export LIBRARY_PATH=/home/xxx:$LIBRARY_PATH   //推荐,因为这样可以在原有值的基础上进行添加。

 

三、使用-I(大写的哎)和-L    

     -I表示include的第一个字母,即搜索头文件(通常头文件都是include的,所以放在include文件夹下)

     -L即(library)的第一个字母,即查找库文件,后面跟的是库的路径。

 

 

最后,GCC可以编译C/C++文件,但如果是C++的请使用G++进行编译,另外,不要用GCC编译用G++进行文件的链接,或G++编译使用GCC进行文件的链接,因为链接时找的运行时库不一样,所以很多情况下,找不到相应的库的头文件。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

边缘998

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值