您的位置:首页 > 其它

gcc 常用命令和参数

2012-11-03 21:44 363 查看
.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进行文件的链接,因为链接时找的运行时库不一样,所以很多情况下,找不到相应的库的头文件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: