• 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

  • 相关阅读:
    2016521-Java-第八周学习总结
    20165221 第七周学习总结
    20165221—JAVA第六周学习心得
    20165221 JAVA第五周学习心得
    20165221 JAVA第四周学习心得
    结对学习创意照
    20165331 第三周学习总结
    20165331 课下作业
    20165331 第二周学习总结
    20165331 第一周学习总结
  • 原文地址:https://www.cnblogs.com/embedded-linux/p/4719512.html
Copyright © 2020-2023  润新知