zoukankan      html  css  js  c++  java
  • gcc常用

    gcc选项:
    -I指定头文件搜索路径。
    -D编译时定义宏
    -L链接时指定库文件搜索路径
    -l指定库文件名称
    -pipe使用管道,一个程序的输出作为输入直接送给另外一个程序,
     而且还可以一直连续下去,不需要临时文件。
    -------------------------------------------
    程序编译过程:
    预处理->编译->汇编->链接

    预处理:C头文件展开,注释删除,宏替代
    gcc -E test.c -o test.i

    编译
    gcc -S test.i -o  test.s
    1)语法检查
    2)编译成汇编语言。

    汇编
    gcc -c test.s -o test.o

    链接
    gcc test.o  -o test
    1)数据段合并。
    2)地址回填,地址重定位。
    -------------------------------------------
    反汇编
    objdump -dS
    -------------------------------------------
    ldd显示可执行文件使用的一些共享函数库。

    strace显示命令执行过程

    ------------------------------------------

    -Wl,--as-needed 和 -Wl,--no-as-needed

    GCC/G++提供了 -Wl,--as-needed 和 -Wl,--no-as-needed 两个选项,这两个选项一个是开启特性,一个是取消该特性。

    在生成可执行文件的时候,通过 -lxxx 选项指定需要链接的库文件。以动态库为例,如果我们指定了一个需要链接的库,则连接器会在可执行文件的文件头中会记录下该库的信息。而后,在可执行文件运行的时候,动态加载器会读取文件头信息,并加载所有的链接库。在这个过程中,如果用户指定链接了一个毫不相关的库,则这个库在最终的可执行程序运行时也会被加载,如果类似这样的不相关库很多,会明显拖慢程序启动过程。

    这时,通过指定 -Wl,--as-needed 选项,链接过程中,链接器会检查所有的依赖库,没有实际被引用的库,不再写入可执行文件头。最终生成的可执行文件头中包含的都是必要的链接库信息。-Wl,--no-as-needed 选项不会做这样的检查,会把用户指定的链接库完全写入可执行文件中。

    参考:GCC/G++选项 -Wl,--as-needed

  • 相关阅读:
    汉字在屏幕上的显示
    手机上的ROM与RAM
    数据表示和计算
    存储器的层次结构
    计算机系统概述
    Python中的文件路径的分隔符
    网络爬虫的基本原理
    iOS多线程简介
    Quartz2D简介
    iOS 事件传递响应链
  • 原文地址:https://www.cnblogs.com/embedded-linux/p/4719512.html
Copyright © 2011-2022 走看看