• gcc/g++ 编译选项


    下面是一个保存在文件 helloworld.cpp 中一个简单的 C++ 程序的代码: 

    /* helloworld.cpp */  
    #include <iostream>  
    int main(int argc,char *argv[])  
    {  
        std::cout << "hello, world" << std::endl;  
        return(0);  
    }  
    程序使用定义在头文件 iostream 中的 cout,向标准输出写入一个简单的字符串。该代码可用以下命令编译为可执行文件: 
    $  g++ helloworld.cpp
    编译器 g++ 通过检查命令行中指定的文件的后缀名可识别其为 C++源代码文件。编译器默认的动作:编译源代码文件生成对象文件(object file),链接对象文件和 libstdc++ 库中的函数得到可执行程序。然后删除对象文件。由于命令行中未指定可执行程序的文件名,编译器采用默认的 a.out。程序可以这样来运行: 
    $ ./a.out
    hello, world
    更普遍的做法是通过 -o 选项指定可执行程序的文件名。下面的命令将产生名为 helloworld 的可执行文件: 
    $ g++ helloworld.cpp -o helloworld
    在命令行中输入程序名可使之运行: 
    $ ./helloworld
    hello, world

    gcc/g++ 在执行编译时,需要4步

      1.预处理,生成.i的文件[使用-E参数]

      2.将预处理后的文件不转换成汇编语言,生成文件.s[使用-S参数]

      3.有汇编变为目标代码(机器代码)生成.o的文件[使用-c参数]

      4.连接目标代码,生成可执行程序[使用-o参数]

    -Wall
        显示所有警告信息(warning all)

    -g
     只是编译器,在编译的时候,产生调试信息。

    -O0
    -O1
    -O2
    -O3
     编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高

    -Idir

      在你是用#i nclude"file"的时候,gcc/g++会先在当前目录查找你所制定的头文件,如
    果没有找到,他回到缺省的头文件目录找,如果使用-I制定了目录,他
    会先在你所制定的目录查找,然后再按常规的顺序去找。

    -Ldir
      制定编译的时候,搜索库的路径。比如你自己的库,能用他制定目录,不然
      编译器将只在标准库的目录找。这个dir就是目录的名称。

    -llibrary
      制定编译的时候使用的库
      例子用法
      gcc -lcurses hello.c
      使用ncurses库编译程式

    -Wl,option
      此选项传递option给连接程式;如果option中间有逗号,就将option分成多个选项,然
    后传递给会连接程式。 

      gcc编译链接动态库时,很有可能编译通过,但是执行时,找不到动态链接库,那是

      因为-L选项指定的路径只在编译时有效,编译出来的可执行文件不知道-L选项后面的值,

      当然找不到。可以用ldd <your_execute>看看是不有 ‘not found’在你链接的库后面,

      解决方法是通过-Wl,rpath=<your_lib_dir>,使得execute记住链接库的位置。

    -o
      制定目标名称,缺省的时候,gcc 编译出来的文件是a.out

    -rdynamic

      选项 -rdynamic 用来通知链接器将所有符号添加到动态符号表中
      (目的是能够通过使用 dlopen 来实现向后跟踪)

    -fPIC 

      PIC就是position independent code

      PIC使.so文件的代码段变为真正意义上的共享。

      详见:http://blog.sina.com.cn/s/blog_54f82cc201011op1.html

    -D

      表示:#define 
      如:-DPOSGP730 等价于 #define POSGP730

  • 相关阅读:
    配置变量的信息
    Smarty保留变量信息
    选择排序
    java.utils.HashMap数据结构分析
    HashMap的工作原理
    Dubbo
    五种单例模式:
    Redis的持久化机制包括RBD和AOF两种,对于这两种持久化方式各有优势
    Zookeeper要安装在奇数个节点,但是为什么?
    Redis搭建多台哨兵
  • 原文地址:https://www.cnblogs.com/SZxiaochun/p/7722505.html
Copyright © 2020-2023  润新知