Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1793365
  • 博文数量: 438
  • 博客积分: 9799
  • 博客等级: 中将
  • 技术积分: 6092
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-25 17:25
文章分类

全部博文(438)

文章存档

2019年(1)

2013年(8)

2012年(429)

GCC

分类: LINUX

2012-03-31 14:37:08

头文件和库的寻找路径

默认的头文件路径为/usr/include和/usr/local/include;而默认的库路径为/usr/lib和/usr/local/lib。

gcc的‘-I’ and ‘-L’选项可以分别指定头文件的路径和库文件的路径。路径之间用冒号分隔,DIR1 :DIR2 :DIR3 :... 选项‘-I’ and ‘-L’也可以多次出现。


gcc的-lNAME选项等价于在库路径里链接名为libNAME的库。它可以是动态的libNAME.so,也可以是静态的libNAME.a。如果两种库同时存在,动态库会默认被链接。

-static选项可以强制使用静态库。


环境变量C_INCLUDE_PATH和LIBRARY_PATH也可以定义头文件的路径和库文件的路径。比如:

$ C_INCLUDE_PATH=/opt/gdbm-1.8.3/include
$ export C_INCLUDE_PATH

$ LIBRARY_PATH=/opt/gdbm-1.8.3/lib
$ export LIBRARY_PATH


环境变量LD_LIBRARY_PATH指明了如果动态库文件(*.so)不在程序链接时所在的目录里时应该载入的目录。

$ LD_LIBRARY_PATH=/opt/gdbm-1.8.3/lib
$ export LD_LIBRARY_PATH


标准

‘-ansi’选项会禁掉和ANSI/ISO有冲突的GNU C扩展。

‘-pedantic’选项和‘-ansi’合用时会禁掉所有的GNU C扩展,而不仅仅是有冲突的部分。


-std选项指定了使用的C标准,比如:

‘-std=c89’ or ‘-std=iso9899:1990’

‘-std=iso9899:199409’

‘-std=c99’ or ‘-std=iso9899:1999’



警告

不产生任何警告信息的源码被称为compile cleanly


-Wall可以启用许多关于普遍错误的警告,它包括:

‘-Wcomment’选项警告嵌套注释,比如:
commented out:
/* commented out
double x = 1.23 ; /* x-position */
*/

‘-Wformat’选项警告在printf和scanf函数里的格式的不正确的用法。


‘-Wunused’ 选项警告声明了但未被使用的变量。

‘-Wimplicit’选项警告未声明但被使用的函数。

‘-Wreturn-type’选项警告没有被声明为void的函数没有return正确的类型或只有空的return语句。

除了上述警告,-Wall同样也定义了其它的警告类型。


‘-W’选项和‘-Wall’相似,警告普遍的编程错误,比如函数从函数体“掉出来”(即期望有return的函数一直到函数尾也没有碰到return语句),以及有符号数与无符号数之间的比较。

实际应用中,‘-W’选项通常和‘-Wall’一起使用。

‘-Wconversion’选项警告可能造成错误的转型,比如把一个负数赋给一个无符号整型。

‘-Wshadow’选项警告一个已经在外层作用域里声明的变量在内层作用域里重复声明。

‘-Wcast-qual’选项警告指针被转型时被删除了类型限定符,比如const。


‘-Wwrite-strings’选项
隐式地给了所有字符串常量一个const限定符,会警告一个重写这些字符串常量的尝试。

‘-Wtraditional’选项警告代码在ANSI/ISO编译器和传统(在ANSI之前)的编译里会被不同地解释。


-Werror’选项把警告当成错误,阻止程序的编译。


预处理


‘-DNAME’选项可以定义一个宏。

‘-DNAME =VALUE ’选项可以定义一个有值的宏

‘-E’选项运行预处理器,输出源文件在预处理后的结果。

‘-save-temps’选项保持临时文件,包括‘.s’的汇编、‘.o’的目标文件和‘.i’的预处理文件。

优化

‘-OLEVEL ’选项定义优化的等级, 其中LEVEL是0到3的整数。各等级描述如下:

‘-O0’或没有‘-O’选项(默认):不执行任何优化。


‘-O1’或‘-O’选项:打开最普通的优化形式,不需要进行速度和空间之间的折衷。

‘-O2’选项:在O1的基础上,进行最大化的优化,它会耗费更长的编译时间,以及在编译时消耗更多的内存。但是和O1一样,不需要进行速度和空间的折衷,所以生成的目标文件的尺寸不会比O1大。这个选项通常是开发程序时最好的优化选项。

‘-O3’选项:开启更昂贵的优化,比如内联函数。这种优化可能会提高速度,但是目标文件的尺寸也会增大。

‘-Os’:这种优化减少可执行程序的尺寸。它可能会使程序运行的快些,因为小尺寸会得到更好的缓冲使用。


通常O0用来调试,而O2用来发行。


平台相关

-m选项可以为不同类型的CPU选择平台相关的选项,比如


-march=pentium4

-march=athlon


‘-mcpu=CPU ’选项综合了速度和可移植性,但它不能得到和‘-march’相同的性能,但在实践中可加便利。


选项‘-m32’ and ‘-m64’控制了在32位或64位环境上的程序的产生。
阅读(1212) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~