linux编译相关(c和c++)
显示编译详情
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++)相关推荐
- linux编译避免污染源码分离,如何避免linux上的系统标准C/C++库?
我安装了新版本的GCC,这对我的linux系统造成了污染.我计划以更好的方式处理多个版本的GCC.我计划在/ opt / tools目录下安装所有不同的版本.然后我的项目makefile显式指定要使用 ...
- linux编译安装的好处,Linux学习—源码安装
源码安装--可以按照自己的需求安装,这是源码安装的好处,而二进制安装无法选择 大部分的源码安装步骤大致相同,具体细节可以参考解压缩之后的README和INSTALL README: 介绍了软件包的功能 ...
- .net core linux 编译,.NET Core 源码编译的问题解析
引言: .NET Core 源码编译 https://github.com/dotnet git clone https://github.com/dotnet/runtime.git 一:Windo ...
- linux编译内核支持pam,linux编译内核make menuconfig报错解决办法
linux编译内核时 输入make menuconfig命令 *** Unable to find the ncurses libraries or the *** required header f ...
- Linux编译x86架构内核出现_stack_chk_guard未定义错误
背景 android模拟器运行于virtualbox中,而virtualbox运行于x86架构的pc端,所以android及其Linux内核都编译成x86架构.当virtualbox的vt未开启的情况 ...
- 非常好的Linux编译内核详解 - -
转载: http://blog.chinaunix.net/uid-263488-id-2138150.html 非常好的Linux编译内核详解 - - 一.内核简介 内核,是一个操作系统的核心.它 ...
- linux编译环境下,华为LiteOS初体验(STM32F407)
linux编译环境下,华为LiteOS初体验(STM32F407) 1.概述 系统:Ubuntu22.04,linux版本号如下 Linux linux 5.15.0-40-generic #43-U ...
- Linux 系统相关目录介绍
Linux 总目录篇 Linux 系统相关目录介绍 /bin 用来贮存用户命令./usr/bin 也被用来贮存用户命令. /sbin 许多系统命令(例如 shutdown)的贮存位置./usr/sbi ...
- 新唐NUC980使用记录:U-Boot Linux 编译与烧录(基于SPI NAND)
文章目录 目的 U-Boot编译 U-Boot环境变量 Linux编译 默认设置 使用SPI NAND剩余分区 使用SPI NAND YAFFS2作为rootfs 打包镜像 总结 目的 这篇文章中将测 ...
最新文章
- python装饰器-python装饰器
- 微软免费图书《Introducing Microsoft LINQ》翻译Chapter2.1:C# 3.0 特性(对象初始化表达式\匿名类型\查询表达式)...
- 基于FPGA的LED点阵系统开发
- 量化交易系统综述——互联网金融之二
- 某瓜数据之sign参数分析
- 【LeetCode】按 tag 分类索引 (900题以下)
- IDEA打开父类的接口方法快捷键
- 多柱汉诺塔最优算法设计探究
- C++ zip压缩库使用
- 域控设定PC定时关机策略操作流程-呈上
- powermockito测试私有方法_Spock代码讲解 静态方法测试
- python 贴吧小爬虫案例
- Android开发实用小工具八——汇率转换工具
- [转]Linux块设备加速缓存bcache和dm-cache:使用SSD来加速服务器
- 大写金额换算器iOS版源代码
- python作业——SVM预测交通流量
- android 判断APP是否第一次打开
- 华三模拟器完成交换机堆叠IRF实验
- Ubuntu20.04安装nVidia显卡遇到的各种坑
- RK3568平台开发系列讲解(视频篇)摄像头采集视频的相关配置