我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:2019跑狗图高清彩图 > 指令调度 >

CFLAGS详解

归档日期:07-20       文本归类:指令调度      文章编辑:爱尚语录

  ,如:CFLAGS=-I/usr/include -I/path/include。同样地,安装一个包时会在安装路径下建立一个include目录,当安装过程中出现问题时,试着把以前安装的包的include目录加入到该变量中来。

  LDFLAGS:gcc 等编译器会用到的一些优化参数,也可以在里面指定库文件的位置。用法:LDFLAGS=-L/usr/lib -L/path/to/your/lib。每安装一个包都几乎一定的会在安装目录里建立一个lib目录。如果明明安装了某个包,而安装另一个包时,它愣是说找不到,可以抒那个包的lib路径加入的LDFALGS中试一下。

  简单地说,LDFLAGS是告诉链接器从哪里寻找库文件,而LIBS是告诉链接器要链接哪些库文件。不过使用时链接阶段这两个参数都会加上,所以你即使将这两个的值互换,也没有问题。

  有时候LDFLAGS指定-L虽然能让链接器找到库进行链接,但是运行时链接器却找不到这个库,如果要让软件运行时库文件的路径也得到扩展,那么我们需要增加这两个库给-Wl,R:

  正如上表中所述,“-I dir”选项可以在头文件的搜索路径列表中添加dir目录。由于Linux中头文件都默认放到了“/usr/include/”目录下,因此,当用户希望添加放置在其他位置的头文件时,就可以通过“-I dir”选项来指定,这样,Gcc就会到相应的位置查找对应的目录。

  在include语句中,“”表示在标准路径中搜索头文件,““””表示在本目录中搜索。故在上例中,可把hello1.c的“#include”改为“#include “my.h””,就不需要加上“-I”选项了。

  选项“-L dir”的功能与“-I dir”类似,能够在库文件的搜索路径列表中添加dir目录。例如有程序hello_sq.c需要用到目录“/root/workplace/Gcc/lib”下的一个动态库libsunq.so,则只需键入如下命令即可:

  需要注意的是,“-I dir”和“-L dir”都只是指定了路径,而没有指定文件,因此不能在路径中包含文件名。

  另外值得详细解释一下的是“-l”选项,它指示Gcc去连接库文件libsunq.so。由于在Linux下的库文件命名时有一个规定:必须以lib三个字母开头。因此在用-l选项指定链接的库文件名时可以省去lib三个字母。也就是说Gcc在对”-lsunq”进行处理时,会自动去链接名为libsunq.so的文件。

  该选项强制Gcc生成标准语法所要求的告警信息,尽管这还并不能保证所有没有警告的程序都是符合ANSI C标准的。运行结果如下所示:

  warning.c:7 警告:在无返回值的函数中,“return”带返回值

  可以看出,该选项并没有发现”long long”这个无效数据类型的错误。

  允许发出ANSI C标准所列的全部警告信息,同样也保证所有没有警告的程序都是符合ANSI C标准的。其运行结果如下所示:

  warning.c:7 警告:在无返回值的函数中,“return”带返回值

  可以看出,使用该选项查看出了”long long”这个无效数据类型的错误。

  warning.c:7 警告:在无返回值的函数中,”return”带返回值

  使用“-Wall”选项找出了未使用的变量tmp,但它并没有找出无效数据类型的错误。

  另外,Gcc还可以利用选项对单独的常见错误分别指定警告,有关具体选项的含义感兴趣的读者可以查看Gcc手册进行学习。

  Gcc可以对代码进行优化,它通过编译选项“-On”来控制优化代码的生成,其中n是一个代表优化级别的整数。对于不同版本的Gcc来讲,n的取值范围及其对应的优化效果可能并不完全相同,比较典型的范围是从0变化到2或3。

  不同的优化级别对应不同的优化处理工作。如使用优化选项“-O”主要进行线程跳转(Thread Jump)和延迟退栈(Deferred Stack Pops)两种优化。使用优化选项“-O2”除了完成所有“-O1”级别的优化之外,同时还要进行一些额外的调整工作,如处理器指令调度等。选项“-O3”则还包括循环展开和其他一些与处理器特性相关的优化工作。

  虽然优化选项可以加速代码的运行速度,但对于调试而言将是一个很大的挑战。因为代码在经过优化之后,原先在源程序中声明和使用的变量很可能不再使用,控制流也可能会突然跳转到意外的地方,循环语句也有可能因为循环展开而变得到处都有,所有这些对调试来讲都将是一场噩梦。所以笔者建议在调试的时候最好不使用任何优化选项,只有当程序在最终发行的时候才考虑对其进行优化。

  强行将函数参数个数固定的函数用ret NUM返回,节省调用函数的一条指令

  CFLAGS是决定Gentoo系统效能与稳定的关键之一。恰当的CFLAGS能在效能、编译时间、与系统稳定度中取得平衡,失败的CFLAGS可能导致编译失败,甚至系统损毁。那么,在茫茫CFLAGS海中,如...博文来自:shandianling

  编译优化,关于CFLAGS与CXXFLAGS本文从金步国《gcc编译优化指南》中摘抄可以个人可以理解...博文来自:lidan3959的专栏

  今天我照着试了一下makefile的隐含规则,出现了问题,很郁闷,主要问题是:用CCFLAGS=-o或者用其他任何的变量作为gcc编译的参数(如:aaaa=-o)都正确,但是我用CFLGS=-o 出现论坛

  在configure时我们经常会遇到明明已经指令了目录但有时就是链接不了的情况,解决方法及原因如下(引用自博文来自:黑暗遊侠

  让我们先看看Makefile规则中的编译命令通常是怎么写的。 大多数软件包遵守如下约定俗成的规范:#1,首先从源代码生成目标文件(预处理,编译,汇编),-c选项表示不执行链接步骤。$(CC)$(C...博文来自:shenhuxi_yu的专栏

  最近看了makefile的手册之后,发现还是不知道怎么写makefile,而且就连看也看的是云里雾里,就我现在工作当中看到的一些makefile文件,只能看个大概的意思,一旦涉及到文件添加、静态库、动...博文来自:zhaoyun_zzz的专栏

  在android的编译系统中使用Android.mk文件组织当前文件夹下面的源文件。如果想在源文件中使用一个自己定义的宏,ex.FLAG_TEST,就需要在当前源文件所在目录的Android.mk文件...博文

  CFLAGS是决定Gentoo系统效能与稳定的关键之一。恰当的CFLAGS能在效能、编译时间、与系统稳定度中取得平衡,失败的CFLAGS可能导致编译失败,甚至系统损毁。那么,在茫茫CFLAGS海中,如...博文来自:collide的专栏

  -DLOCAL_CFLAGS+=-DXXX 相当于在所有源文件中增加一个宏定义#define-O代表默认优化,可选:-O0不优化,-O1低级优化,-O2中级优化,-O3高级优化,-Os代码空间优化 -...博文来自:编程菜鸟进阶之路

  CFLAGS表示用于C编译器的选项,CXXFLAGS表示用于C++编译器的选项。这两个变量实际上涵盖了编译和汇编两个步骤。先来看几个相关的环境变量:PATH、LDFLAGS、CFLAGSPATH:大家...博文来自:tuhuolong的专栏

  在上面的编译命令中我们其实用到了一个工具“pkg-config”,它主要有以下几个功能:1.检查库的版本号。如果所需要的库的版本不满足要求,它会打印出错误信息,避免链接错误版本的库文件。2.获得编译预...博文来自:Koma Hub

  CFLAGS表示用于C编译器的选项,CXXFLAGS表示用于C++编译器的选项。这两个变量实际上涵盖了编译和汇编两个步骤。CFLAGS:指定头文件(.h文件)的路径,如:CFLAGS=-I/usr/i...博文来自:youngyang的专栏

  在RHEL4x86_64位上装个iRedMail,自带的安装脚本不能用,包都是基于rhel5编译的,在4上面安装不了,自己手动编译吧安装到clamav的时候有点麻烦,说需要zlib1.2.2的版本,又...博文来自:weixin_33834910的博客

本文链接:http://ok-panic.net/zhilingdiaodu/415.html