GNU命令行常用参数

Math_Still Lv2
  1. 编译链接选项

    • -o output_filename:指定输出文件的名称,即生成的目标可执行文件名。
    • -c:只进行编译,不进行链接,生成.o(对象文件)。
    • -Wl,option传递选项给链接器

    在g++(或gcc)编译器中,-Wl,option 是一个传递选项给链接器的特殊语法。这里的 -Wl 表示“传递给链接器(Linker)”,后面跟着逗号和具体的链接器选项。

    当你需要在编译时指定链接器特有的选项,但又不想直接调用链接器(如ld),而是希望通过g++命令一并处理编译和链接步骤,这时就可以使用 -Wl,option 的形式。

    1
    g++ -Wl,-rpath=/path/to/libs my_program.o -lmy_library

    在这个例子中,-Wl,-rpath=/path/to/libs 会将 -rpath=/path/to/libs 这个选项传递给链接器,使得生成的可执行文件在运行时能够从 /path/to/libs 目录查找动态链接库。

    其他常见的 -Wl,option 示例包括:

    • -Wl,-static:链接为静态库(生成静态链接的可执行文件)。
    • -Wl,-soname,libname.so.major:设置共享库的SONAME字段。
    • -Wl,-Bsymbolic-Wl,Bdynamic-Wl,Bstatic:控制符号解析方式等。
  2. 预处理和源码处理

    • -E:预处理后停止,生成后缀为 .i 的预编译文件。
    • -S:汇编后停下来,生成后缀为 .s 的汇编源文件。
    • -std=c++[version]:指定C++语言的标准版本,例如-std=c++11-std=c++14等。
  3. 优化选项

    • -O0:无优化。
    • -O1-O3:逐步提升优化级别,-O3是最高的优化级别。
    • -Ofast:更激进的优化,可能违反某些标准规定以换取更高的性能。
    • -march=native:针对当前机器架构进行特定优化。
  4. 头文件和库操作

    • -I directory:添加一个目录到头文件搜索路径。
    • -L directory:添加一个目录到库文件搜索路径。
    • -l library:链接指定的库。
    • -static:生成静态链接的可执行文件,不依赖外部共享库。
    • -shared:生成共享库文件(DLL或.so)。
  5. 警告与错误处理

    • -Wall:开启所有常见警告。
    • -Werror:将所有警告视为错误。
    • -pedantic:遵循ISO C++标准严格要求,不符合则发出相应的警告。
    • -Wcast-align :当源程序中地址不需要对齐的指针指向一个地址需要对齐的变量地址时,则产生一个警告。
    • -v:输出 gcc 工作的详细过程
    • -Q:显示编译过程的统计数据和每一个函数名
    • --target-help:显示目前所用的gcc支持CPU类型
  6. 调试选项

    • -g:生成包含调试信息的目标文件,以便使用GDB等调试器进行调试。
    • -p -pg:会将剖析(Profiling)信息加入到最终生成的二进制代码中。剖析信息对于找出程序的性能瓶颈很有帮助,是协助Linux程序员开发出高性能程序的有力工具。
    • -save-temps:保存编译过程中生成的一些列中间文件。

    gcc 在编译时不会将调试符号插入到生成的二进制代码中,如果需要在编译时生成调试符号信息,可以使用 gcc 的 -g 或 -ggdb 选项。

    通过在 -g 选项后附加数字1、2、3指定在代码中加入调试信息的多少。默认的级别是-g2。

    • -g1不包含局部变量和与行号有关的调试信息,因此只能够用于回溯跟踪和堆栈转储。
    • -g2此时产生的调试信息包括:扩展的符号表、行号、局部或外部变量信息
    • -g3包含级别2中的所有调试信息以及源代码中定义的宏。

  • 標題: GNU命令行常用参数
  • 作者: Math_Still
  • 撰寫于: 2024-01-28 23:27:16
  • 更新于: 2024-01-28 23:27:53
  • 連結: https://math-still.github.io/2024/01/28/GNU-Compiler-common-options/
  • 版權宣告: 本作品采用 CC BY-NC-SA 4.0 进行许可。
 留言
此頁目錄
GNU命令行常用参数