gcc参数总结

/*gcc 命令总结*/

补充下gcc的知识,免得被大自然说编译原理不行..

1、-o 参数

参数说明: -o参数用来指定生成程序的名字

gcc test.c 会编译出一个名为a.out的程序

gcc test.c -o test 编译出一个名为test的程序

2、-l参数和-L参数

参数说明: -l参数就是用来指定程序要链接的库,-l参数紧接着就是库名,比如,我要链接到数学库,它的库名是m,它的库文件名是libm.so(一般放在/lib、/usr/lib/usr/local/lib目录下),很容易看出,把库文件名的头lib和尾.so去掉就是库名了

放在/lib和/usr/lib和/usr/local/lib里的库直接用-l参数就能链接了,但如果库文件没放在这三个目录里,而是放在其他目录里,这时我们只用-l参数的话,链接还是会出错,出错信息大概是:“/usr/bin/ld: cannot find -lxxx”,也就是链接程序ld在那3个目录里找不到libxxx.so,这时另外一个参数-L就派上用场了,比如常用的X11的库,它在/usr/X11R6/lib目录下,我们编译时就要用-L/usr/X11R6/lib -lX11参数,-L参数跟着的是库文件所在的目录名。再比如我们把libtest.so放在/aaa/bbb/ccc目录下,那链接参数就是-L
/aaa/bbb/ccc -ltest

手工来写链接参数总是很麻烦的,还好很多库开发包提供了生成链接参数的程序,名字一般叫xxxx-config,一般放在/usr/bin目录下,比如, mysql的链接参数生成程序是mysql_config(注意下划线,这个比较特殊),执行mysql_config --libs:

-L/usr/lib/x86_64-linux-gnu -lmysqlclient -lpthread -lz -lm -lrt -ldl 

这些就是mysql需要的链接参数,运行命令自动生成,多简单省事!

xxx-config除了--libs参数外还有一个参数是--cflags用来生成头文件包含目录的,也就是-I参数,执行 mysql_config --cflags:

-I/usr/include/mysql -DBIG_JOINS=1  -fno-strict-aliasing  -g

这就是mysql需要的头文件包含目录

现在的问题就是怎样用这些输出结果了,最直接的方法就是复制粘贴或者照抄,更好的办法是在编译命令行里加入这个`xxxx-config --libs --cflags`,比如编译一个mysql程序:gcc mysql.c `mysql_config --libs --cflags`

就OK了(我前几天的博客里提到过这个问题,^_^)

3、-include和-I参数

参数说明: -include用来包含头文件,但一般情况下包含头文件都在源码里用#include xxxxxx实现,-include参数很少用。

-I参数是用来指定头文件目录,/usr/include目录一般是不用指定的,gcc知道去那里找,但是如果头文件不在/usr/include里我们就要用-I参数指定了,比如头文件放在/myinclude目录里,那编译命令行就要加上-I /myinclude参数了,如果不加你会得到一个"xxxx.h: No such file or directory"的错误。-I参数可以用相对路径,比如头文件在当前目录,可以用-I.来指定。上面我们提到的--cflags参数就是用来生成-I
参数的

4、-O参数

参数说明: 这是一个程序优化参数,一般用-O2就是,用来优化程序用的,比如gcc test.c -O2,优化得到的程序比没优化的要小,执行速度可能也有所提高

5、-shared参数

参数说明: 编译动态库时要用到,比如gcc -shared test.c -o libtest.so

6、几个相关的环境变量(用cmake时需要)

PKG_CONFIG_PATH:用来指定pkg-config用到的pc文件的路径,默认是/usr/lib/pkgconf

ig,pc文件是文本文件,扩展名是.pc,里面定义开发包的安装路径,Libs参数和Cflags参数等等。

CC:用来指定c编译器

CXX:用来指定cxx编译器

LIBS:跟上面的--libs作用差不多

CFLAGS:跟上面的--cflags作用差不多

CC,CXX,LIBS,CFLAGS手动编译时一般用不上,在做configure时有时用到,一般情况

下不用管

环境变量设定方法:export ENV_NAME=xxxxxxxxxxxxxxxxx

7、参考:http://wenku.baidu.com/view/655f48b91a37f111f1855b36.html

gcc参数总结

时间: 2024-12-09 04:13:37

gcc参数总结的相关文章

gcc参数-l传递顺序错误导致`undefined reference'的一点小结

刚才编译一个pthread的单文件程序, 使用的命令行是: gcc -o thread1 -lpthread thread1.c 结果报错: 1 $ gcc -o thread1 -lpthread thread1.c 2 /tmp/ccNqs6Bh.o: In function `main': 3 thread1.c:(.text+0x49): undefined reference to `pthread_create' 4 thread1.c:(.text+0x5f): undefined

GCC参数详解

[介绍] gcc and g++分别是gnu的c & c++编译器 gcc/g++在执行编译工作的时候,总共需要4步 1.预处理,生成.i的文件 2.将预处理后的文件不转换成汇编语言,生成文件.s 3.有汇编变为目标代码(机器代码)生成.o的文件 4.连接目标代码,生成可执行程序 [参数详解] -x language filename 设定文件所使用的语言,使后缀名无效,对以后的多个有效.也就是根据约定C语言的后缀名称是.c的,而C++的后缀名是.C或者.cpp. 可以使用的参数有下面的这些:

gcc 参数

简介gcc and g++现在是gnu中最主要和最流行的c & c++编译器 .gcc/g++在执行编译工作的时候,总共需要以下几步:1.预处理,生成.i的文件[预处理器cpp]2.将预处理后的文件不转换成汇编语言,生成文件.s[编译器egcs]3.有汇编变为目标代码(机器代码)生成.o的文件[汇编器as]4.连接目标代码,生成可执行程序[链接器ld] GCC能够处理的后缀有:a. *.c *.C (C语言)b. *.cxx *.cc (C++语言)c. *.m (面向对象的C)d. *.i (

scons用户指南翻译(附gcc/g++参数详解)

scons用户指南 翻译 http://blog.csdn.net/andyelvis/article/category/948141 官网文档 http://www.scons.org/documentation.php ===================================== UNIX系统开发-gcc参数详解 [介绍] gcc and g++分别是gnu的c & c++编译器 gcc/g++在执行编译工作的时候,总共需要4步 1.预处理,生成.i的文件[预处理器cpp] 2

linux下gcc编译的参数详细说明

参考网址:1 http://hi.baidu.com/zengzhaonong/item/f1f9383565fa5c302e0f8125 gcc使用方法 汇总 2 http://s99f.blog.163.com/blog/static/35118365201311261453629/ gcc参数区别 3    http://blog.csdn.net/ruglcc/article/details/7814546       makefile教程 刚接触linux下的C编程.以前做项目时,接触

gcc/g++ 常用参数

编译的步骤 参考:gcc参数详解 gcc and g++分别是gnu的c & c++编译器 gcc/g++在执行编译工作的时候,总共需要4步 1.预处理,生成.i的文件[预处理器cpp]. 对应的参数是 -E 2.将预处理后的文件不转换成汇编语言,生成文件.s[编译器egcs].对应的参数是 -S 3.有汇编变为目标代码(机器代码)生成.o的文件[汇编器as].对应的参数是 -c 4.连接目标代码,生成可执行程序[链接器ld].无参数. 编译步骤举例 有三个文件f1.h.f1.cc.test.c

windows下gcc开发c语言环境配置

工具准备:(配置windows) 1.安装qt5 2.在window系统的path路径中增加化境变量: C:\Qt\Qt5.6.2\5.6\mingw49_32\bin C:\Qt\Qt5.6.2\Tools\mingw492_32\bin 3.打开命令窗口,出入gcc –v,可以查看版本信息 4.打开qt生成一个空的项目,编译后程序可以运行,表示qt配置成功. 工具准备:(配置linux) linux自带gcc编译器. Helloworld程序的结构: #include "stdio.h&qu

gcc 动态编译 动态库路径

gcc 动态编译(共享库) 动态编译的可执行文件需要附带一个的动态链接库,在执行时,需要调用其对应动态链接库中的命令优点:体积小,编译快缺点:依赖性高 代码如下: [[email protected] shared]# cat add.cint add (int x, int y) {return x + y;} Parsed in 0.007 seconds at 12.13 KB/sadd.c 求和函数 代码如下: [[email protected] shared]# cat print.

gcc的使用简介与命令行参数说明

(一) gcc的基本用法(二) 警告提示功能选项(三) 库操作选项(四) 调试选项(五) 交叉编译选项 (一) gcc的基本用法使用gcc编译器时,必须给出一系列必要的调用参数和文件名称.不同参数的先后顺序对执行结果没有影响,只有在使用同类参数时的先后顺序才需要考虑.如果使用了多个 -L 的参数来定义库目录,gcc会根据多个 -L 参数的先后顺序来执行相应的库目录.因为很多gcc参数都由多个字母组成,所以gcc参数不支持单字母的组合,Linux中常被叫短参数(short options),如 -