IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> Linux C/C++编译过程 -> 正文阅读

[C++知识库]Linux C/C++编译过程

Linux C/C++编译过程

参考:
C/C++程序编译过程详解 - mickole - 博客园 (cnblogs.com)
超详细的CMake教程 - 一杯清酒邀明月 - 博客园 (cnblogs.com)

预处理 -E
编译 -S
汇编 -c
链接 -o
源代码hello.c
经过预处理的源代码.i
汇编器编译的汇编代码.s
目标文件.o
可执行文件hello

1、预处理:展开头文件、宏定义和条件编译处理等

gcc -E source.c -o source.i #生成source.i文件

2、编译:将处理后为念翻译成汇编代码的过程

gcc -S source.i #默认生成source.s文件

3、汇编:将上一步的汇编代码翻译成对应的二进制机器码的过程

gcc -c source.s #生成source.o文件

4、链接:将生成目标文件和其引用的各种符号生成一个完整的可执行程序;链接时会有虚拟内存的重定向。

gcc -o main main.o -Wl,-rpath=. atoi.so.1 

在链接的时候,我们可以通过-Wl,-rpath=sopath来指定运行时加载动态库的路径;
5、生成可执行文件

ar rc libhello.a hello.o

该命令将hello.o添加到静态库文件libhello.a,ar命令就是用来创建、修改库的,也可以从库中提出单个模块,参数r表示在库中插入或者替换模块,c表示创建一个库,

-Wl: 表示后面的参数将传给link程序ld,gcc编译时候的链接实际上是调用ld进行的

gcc -fPIC -shared -o atoi.so.1 atoi.c

-share该选项指定生成动态连接库(让连接器生成T类型的导出符号表,有时候也生成弱连接W类型的导出符号,后面介绍nm工具的时候再说),不用该标志外部程序无法连接。相当于一个可执行文件。

-fPIC表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的所以动态载入时是通过代码拷贝的方式来满足不同进程的需要,而不能达到真正代码段共享的目的

在linux 下可以使用ldd命令来查看某个可执行文件需要链接哪些共享库(动态库),并可以确定这些要链接的共享库在本机中的位置

动态库和静态库连接时搜索路径的顺序
静态库
1、ld先去找gcc命令中参数-L

2、再找gcc的环境变量LIBRARY_PATH(用法:LIBRARY_PATH= path)

3、再找默认的目录 /lib /usr/lib /usr/local/lib

动态库
1、ld先去找gcc命令中的参数-L

2、环境变量LD_LIBRARY_PATH(LD_LIBRARY_PATH=path)

3、配置文件/etc/ld.so.conf中的动态链接库路径(若修改/etc/ld.so.conf文件,运行/sbin/ldconfig)

4、默认的目录/lib /usr/lib

头文件
1、去-I(id大写)指定的路径

2、源代码中(#include)的头文件路径

3、/usr/include

4、/usr/local/include

当静态链接库和动态链接库重名时,gcc优先使用动态链接库

-I(大写的i) :指定头文件的搜索路径

-l(小写的L):库名

-L:库搜索目录

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-10-08 20:22:11  更:2022-10-08 20:24:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 2:26:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码