显示编译详情

gcc  --verbose

1、预处理阶段

一段程序中通常会包含宏定义和头文件包含,预处理阶段就是对这两者进行处理,同时包括了语法检查,该阶段的命令为gcc -E hello.c -o hello.i

生成一个hello.i文件。文件hello.i文件特别大,是因为程序将头文件进行了替换,导致文件大的现象,所以在实际编程过程中,如果用不到的头文件就不需要包含在程序中,否则会造成时间和空间的浪费。

选项 -E 使 g++ 将源代码用编译预处理器处理后不再执行其他动作。下面的命令预处理源码文件 helloworld.cpp 并将结果显示在标准输出中:

g++ -o haikang/haikang_ipc.o -c haikang/haikang_ipc.cpp -std=gnu++11 -Wall -c -ggdb3 -DHUAWEI_ANDROID  -DHUAWEI_ANDROID_8V9A  -DDEBUG  -I../..//include -I../..//include/poco-1.8.0.1 -I../..//include/libpcap-1.7.4 -I../..//dpi/include/ -I../..//send/include/ -I../..//parser/include/ -I../..//reassem/include/ -I../..//save/include/ -I../..//common/include/ -I../include/ -I./haikang/ -I./haikang/incCn -I../..//common/include/poco-1.8.0.1  -L../..//lib/x64 -lreassem  -Wl,-rpath=./:./HCNetSDKCom -lhcnetsdk

# g++ -E haikang/haikang_ipc.cpp -std=gnu++11 -Wall -c -ggdb3 -DHUAWEI_ANDROID  -DHUAWEI_ANDROID_8V9A  -DDEBUG  -I../..//include -I../..//include/poco-1.8.0.1 -I../..//include/libpcap-1.7.4 -I../..//dpi/include/ -I../..//send/include/ -I../..//parser/include/ -I../..//reassem/include/ -I../..//save/include/ -I../..//common/include/ -I../include/ -I./haikang/ -I./haikang/incCn -I../..//common/include/poco-1.8.0.1  -L../..//lib/x64 -lreassem  -Wl,-rpath=./:./HCNetSDKCom -lhcnetsdk  >tmp.bak

--no-as-needed

https://my.oschina.net/yepanl/blog/2222870

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

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

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

linux编译相关(c和c++)相关推荐

  1. linux编译避免污染源码分离,如何避免linux上的系统标准C/C++库?

    我安装了新版本的GCC,这对我的linux系统造成了污染.我计划以更好的方式处理多个版本的GCC.我计划在/ opt / tools目录下安装所有不同的版本.然后我的项目makefile显式指定要使用 ...

  2. linux编译安装的好处,Linux学习—源码安装

    源码安装--可以按照自己的需求安装,这是源码安装的好处,而二进制安装无法选择 大部分的源码安装步骤大致相同,具体细节可以参考解压缩之后的README和INSTALL README: 介绍了软件包的功能 ...

  3. .net core linux 编译,.NET Core 源码编译的问题解析

    引言: .NET Core 源码编译 https://github.com/dotnet git clone https://github.com/dotnet/runtime.git 一:Windo ...

  4. linux编译内核支持pam,linux编译内核make menuconfig报错解决办法

    linux编译内核时 输入make menuconfig命令 *** Unable to find the ncurses libraries or the *** required header f ...

  5. Linux编译x86架构内核出现_stack_chk_guard未定义错误

    背景 android模拟器运行于virtualbox中,而virtualbox运行于x86架构的pc端,所以android及其Linux内核都编译成x86架构.当virtualbox的vt未开启的情况 ...

  6. 非常好的Linux编译内核详解 - -

    转载: http://blog.chinaunix.net/uid-263488-id-2138150.html 非常好的Linux编译内核详解 - - 一.内核简介  内核,是一个操作系统的核心.它 ...

  7. linux编译环境下,华为LiteOS初体验(STM32F407)

    linux编译环境下,华为LiteOS初体验(STM32F407) 1.概述 系统:Ubuntu22.04,linux版本号如下 Linux linux 5.15.0-40-generic #43-U ...

  8. Linux 系统相关目录介绍

    Linux 总目录篇 Linux 系统相关目录介绍 /bin 用来贮存用户命令./usr/bin 也被用来贮存用户命令. /sbin 许多系统命令(例如 shutdown)的贮存位置./usr/sbi ...

  9. 新唐NUC980使用记录:U-Boot Linux 编译与烧录(基于SPI NAND)

    文章目录 目的 U-Boot编译 U-Boot环境变量 Linux编译 默认设置 使用SPI NAND剩余分区 使用SPI NAND YAFFS2作为rootfs 打包镜像 总结 目的 这篇文章中将测 ...

最新文章

  1. python装饰器-python装饰器
  2. 微软免费图书《Introducing Microsoft LINQ》翻译Chapter2.1:C# 3.0 特性(对象初始化表达式\匿名类型\查询表达式)...
  3. 基于FPGA的LED点阵系统开发
  4. 量化交易系统综述——互联网金融之二
  5. 某瓜数据之sign参数分析
  6. 【LeetCode】按 tag 分类索引 (900题以下)
  7. IDEA打开父类的接口方法快捷键
  8. 多柱汉诺塔最优算法设计探究
  9. C++ zip压缩库使用
  10. 域控设定PC定时关机策略操作流程-呈上
  11. powermockito测试私有方法_Spock代码讲解 静态方法测试
  12. python 贴吧小爬虫案例
  13. Android开发实用小工具八——汇率转换工具
  14. [转]Linux块设备加速缓存bcache和dm-cache:使用SSD来加速服务器
  15. 大写金额换算器iOS版源代码
  16. python作业——SVM预测交通流量
  17. android 判断APP是否第一次打开
  18. 华三模拟器完成交换机堆叠IRF实验
  19. Ubuntu20.04安装nVidia显卡遇到的各种坑
  20. RK3568平台开发系列讲解(视频篇)摄像头采集视频的相关配置

热门文章

  1. SigmaTel使出专利杀手锏,中国MP3播放器产业链均受影响
  2. 学习笔记-linker框架层的Hook和利用
  3. 写一篇3000字生命科学导论论文
  4. task_10时间序列
  5. 宝付支付如何使用Cookie技术
  6. [附源码]java毕业设计旅游景点管理系统
  7. ThinkPHP5 SQL注入(select方法)
  8. 手机控制电脑关机程序
  9. xynuoj 1650 简单计算器
  10. python打包exe 带第三方库_Python三方库:PyInstaller(exe程序打包)