• <i id='6i192'><div id='6i192'><ins id='6i192'></ins></div></i>
    <i id='6i192'></i>

    <span id='6i192'></span>

      <fieldset id='6i192'></fieldset>
        <ins id='6i192'></ins>

          <acronym id='6i192'><em id='6i192'></em><td id='6i192'><div id='6i192'></div></td></acronym><address id='6i192'><big id='6i192'><big id='6i192'></big><legend id='6i192'></legend></big></address>

          <dl id='6i192'></dl>
        1. <tr id='6i192'><strong id='6i192'></strong><small id='6i192'></small><button id='6i192'></button><li id='6i192'><noscript id='6i192'><big id='6i192'></big><dt id='6i192'></dt></noscript></li></tr><ol id='6i192'><table id='6i192'><blockquote id='6i192'><tbody id='6i192'></tbody></blockquote></table></ol><u id='6i192'></u><kbd id='6i192'><kbd id='6i192'></kbd></kbd>

            <code id='6i192'><strong id='6i192'></strong></code>
          1. Linux平台下关于GCC编译及使用的方法

            • 时间:
            • 浏览:10
            • 来源:124软件资讯网

              编译:

              第一步、是举行预编译  ,使用-E参数可以让GCC在预处置惩罚竣事后制止编译历程:

              gcc -E hello.c -o hello.i

              预处置惩罚的宏界说插入到hello.i中

              第二步、是将hello.i编译为目的代码  ,这可以通过使用-c参数来完成:

              gcc -c hello.i -o hello.o

              也可以通过源文件直接天生

              gcc -c hello.c

              第三步、是将天生的目的文件链接成可执行文件:

              gcc hello.o -o hello

              也可以通过源文件直接天生

              gcc -o hello hello.c

              忠告:

              1、-pedantic 选项  ,那么使用了扩展语法的地方将发生响应的忠告信息

              2、-Wall 使用它能够使GCC发生尽可能多的忠告信息

              3、-Werror  ,它要求GCC将所有的忠告当成错误举行处置惩罚

              库依赖:

              1、Linux下的大多数函数都默认:

              头文件放到/usr/include/目录下

              而库文件则放到/usr/lib/目录下

              2、GCC在编译时必须有自己的措施来查找所需要的头文件和库文件  。

              -I选项可以向GCC的头文件搜索路径中添加新的目录  。

              例如  ,若是在/home/xiaowp/include/目录下有编译时所需要的头文件  ,为了让GCC能够顺遂地找到它们  ,就可以使用-I选项:

              gcc -o test test.c -I /home/xiaowp/include

              -L选项向GCC的库文件搜索路径中添加新的目录

              例如  ,若是在/home/xiaowp/lib/目录下有链接时所需要的库文件libfoo.so  ,为了让GCC能够顺遂地找到它 ,可以使用下面的下令

              gcc -o test test.c -L /home/xiaowp/lib -lfoo

              值得好好诠释一下的是-l选项 ,它指示GCC去毗连库文件libfoo.so.

              Linux下的库文件在命名时有一个约定  ,那就是应该以lib三个字母开头  ,由于所有的库文件都遵照了同样的规范  ,因此在用-l选项指定链接的库文件名时可以省去lib三个字母 ,也就是说GCC在对-lfoo举行处置惩罚时  ,会自动去链接名为libfoo.so的文件  。

              -static选项  ,强制使用静态链接库

              若是在/home/xiaowp/lib/目录下有链接时所需要的库文件libfoo.so和libfoo.a

              为了让GCC在链接时只用到静态链接库  ,可以使用下面的下令:

              gcc -o test test.c -L /home/xiaowp/lib -static -lfoo

              选项-O可以告诉GCC同时减小代码的长度和执行时间  ,其效果等价于-O1.

              在这一级别上能够举行的优化类型虽然取决于目的处置惩罚器 ,但一样平常都市包罗线程跳转(Thread Jump)和延迟退栈(Deferred Stack Pops)两种优化 。

              选项-O2告诉GCC除了完成所有-O1级此外优化之外  ,同时还要举行一些分外的调整事情  ,如处置惩罚器指令调理等  。

              选项-O3则除了完成所有-O2级此外优化之外  ,还包罗循环睁开和其它一些与处置惩罚器特征相关的优化事情  。

              通常来说 ,数字越大优化的品级越高  ,同时也就意味着法式的运行速率越快  。

              许多Linux法式员都喜欢使用-O2选项  ,由于它在优化长度、编译时间和代码巨细之间  ,取得了一个比力理想的平衡点 。

              time ./test 检察法式执行时间

              优化虽然能够给法式带来更好的执行性能 ,但在如下一些场所中应该制止优化代码:

              法式开发的时间优化品级越高 ,消耗在编译上的时间就越长  ,因此在开发的时间最好不要使用优化选项  ,只有到软件刊行或开发竣事的时间  ,才思量对最终天生的代码举行优化 。

              资源受限的时间一些优化选项会增添可执行代码的体积  ,若是法式在运行时能够申请到的内存资源很是重要(如一些实时嵌入式装备)  ,那就不要对代码举行优化 ,由于由这带来的负面影响可能会发生很是严重的结果  。

              跟踪调试的时间在对代码举行优化的时间  ,某些代码可能会被删除或改写  ,或者为了取得更佳的性能而举行重组  ,从而使跟踪和调试变得异常难题 。

              加速:

              使用管道取代编译中暂时文件  ,

              -pipe 加速编译

              gcc -pipe foo.c -o foo

              GCC常用选项

              -c 通知GCC作废链接步骤  ,即编译源码并在最后天生目的文件;

              -Dmacro 界说指定的宏 ,使它能够通过源码中的#ifdef举行磨练;

              -E 不经由编译预处置惩罚法式的输出而运送至尺度输出;

              -g3 获得有关调试法式的详细信息  ,它不能与-o选项团结使用;

              -Idirectory 在包罗文件搜索路径的起点处添加指定目录;

              -llibrary 提醒链接法式在建立最终可执行文件时包罗指定的库;

              -O、-O2、-O3 将优化状态打开  ,该选项不能与-g选项团结使用;

              -S 要求编译法式天生来自源代码的汇编法式输出;

              -v 启动所有警报;

              -Wall 在发生警报时作废编译操作  ,即将警报看作是错误;

              -Werror 在发生警报时作废编译操作  ,即把报警看成是错误;

              -w 克制所有的报警