多个cpp文件生成so_C++:C++的文件搜索路径
在做大型工程的时候,除了有C++语法知识之外,还要有工程能力。
最先要具备的能力是:
理解C++文件的编译,链接过程。
明白C++头文件的搜索路径。
本文,介绍C++的文件搜索路径。
对于C++文件来说,主要有两种,一种是.h文件,一种是.cpp文件。
其中.h文件,相对来说,不那么重要。因为.cpp文件里会#include "a.h"一下,这样.h文件会在预编译阶段被加入到.cpp中,实质上,这是一种强制的替换。
谁来执行这个替换呢?是gcc,这个编译器。
gcc这个编译器会先对代码进行编译,甚至进行代码优化,再进行链接。
编译的过程也分为几个阶段,但不重要,主要是cpp文件会被编译成一个os文件。这是一个二进制文件。每一个cpp文件要变成程序,就需要一个os文件。这个编译的过程中,gcc会对C++代码进行代码优化,这个中间过程,可以看编译原理之类的书,我目前在搞这些,枯燥无味,却不得不做,因为性能要达标。
编译完了,就会进行链接:所谓的链接,就是把一些已经存在的库文件,链接到代码中。这个过程可以理解为:gcc有的时候只有一些库文件,也就是so文件。和它们的头文件,为啥只有so,因为头文件给接口,so就能保护源代码,从而使得程序可以以库的形式卖出价格。这些库文件的so要和我们自己写的cpp文件生成的.so链接起来。大概就是so中有一个表,表示自己身体里有哪些代码段对应的二进制,gcc就根据这个表,根据代码的需要,把二进制段拼凑起来。
最后链接完成的,就是exe文件,也就是可执行文件。
题外话:动态链接和静态链接的区别在于,静态链接是把库文件打包复制一份到exe,而动态链接是,可执行文件运行的时候,再去机子上的环境去寻找so,再构建起来。
那么,知道了gcc是怎么编译的了,问题就来了,一个cpp中会#include "a.h“,"a.h"中可能会有"b.h",也可能是"/tvm/b.h",那gcc怎么找b.h呢?
其实很简单,对于#include<iostream>这种:
gcc就会直奔gcc -l 这个路径指定的路径下去找。
如果gcc -l没有指定目录,它就会去usr/local下去找。
如果还是找不到,就会去local/bin里面去找。
路径可能是记错了,用的时候搜一下就好。
对于#include "hah.n"这种。
gcc就会在本目录下搜索,搜索不到,才会和<iostream>按照同样的逻辑去寻找。
多个cpp文件生成so_C++:C++的文件搜索路径相关推荐
- java生成pdf_Java实现PDF文件生成并且打印pdf文件 demo
## Java实现PDF生成并且打印pdf文件(附demo) #### 目录: 0. 效果预览 1. 准备环境 2. Java如何调用打印机进行打印 3. Java如何生成pdf打印文件 4. 实现p ...
- 依据BOM和已经存在的文件生成其他种类的文件
在BOM中记录中有物料编码,物料名称,物料规格等,而且依据BOM已经生成了一些的文件,如采购规格书,这个时候需要生成相应的检验规格书模板,可以使用下面的VBA代码,具体代码如下: Function I ...
- 使用NPOI按照word模板文件生成新的word文件
/// <summary>/// 按照word模板文件 生成新word文件/// </summary>/// <param name="tempFile&quo ...
- pb文件生成java类,根据proto文件生成pb和pb_service文件
假如有一个HelloWorld.proto文件,内容如下: syntax = "proto3"; option java_package = "ex.grpc" ...
- npoi word生成HTML,使用NPOI按照word模板文件生成新的word文件
/// /// 按照word模板文件 生成新word文件 /// /// 模板文件路径 /// 生成文件路径 /// 议案登记 public void CreateFileByTemplate(str ...
- 根据proto文件生成pb和pb_service文件
假如有一个HelloWorld.proto文件,内容如下: syntax = "proto3";option java_package = "ex.grpc"; ...
- Cocos Creator TypeScript 中使用ProtoBuf(利用工具把proto文件生成对应的js文件以及ts文件)
我是一枚刚入坑cocos的小白o(╯□╰)o 开发环境:Cocos Creator 1.9 (需要安装Node.js,使用npm命令) 在网上找了很久都是讲的protobuf.js的用法,但是没有 ...
- 【LaTex】利用ins文件和dtx文件生成cls或sty文件,latex宏包的生成与创建方法;配置宏包文件的方法,latex宏包文件放置目录
一.宏包文件无法找到 在编译tex文件时,如果宏包文件并不在配置目录中,就会发出类似[LaTeX Error: File `pageno.sty' not found.]的错误. 二.解决方法就是自己 ...
- 可执行程序dll的依赖分析,dll文件32/64区分,dll的搜索路径
1.dll文件的依赖分析可以通过 使用64位的depends.exe查看你exe依赖的dll 2.32位dll和64位dll的查看 3.dll文件的搜索路径 作者:朱金灿 来源:http://blog ...
最新文章
- 2月07日云栖精选夜读:观点 | 阿里云 MVP 唐俊飞:安全性可以认为是一种能力...
- python 可变参数 关键字参数_Python关键字及可变参数*args,**kw原理解析
- Filebeat常用配置
- 无法解决 equal to 运算中 Chinese_PRC_CI_AS 和 SQL_Latin1_General_CP1_CI_AS 之间的排序规则冲突。...
- CodeForces - 1350D Orac and Medians(思维)
- Excel 2007 Open XML文件结构(2)
- 2021中国新锐品牌发展研究:食品饮料行业报告
- STM32-通用定时器-PWM输出
- 一体机服务器性能,一体机的服务器
- matlab判断向量组线性相关性的三种方法
- AppStore上传已经开发好的App的方法
- java cpt_1、第十 - WEB开发进阶 - JavaSricpt 正则表达式
- NOI 2017 整数(线段树)
- FEC介绍(二)-详解RS编码
- 日版iphone5 SB 配合REBELiOS卡贴破解电信3G步骤
- 那些年,大厂在用的技术(前端)
- 中文用户名改为英文只要3步复制黏贴
- 做一名活动策划是什么体验?
- [DASCTF Apr.2023 X SU战队2023开局之战] crypto复现
- 零基础自学UI设计要看什么书籍和资料