栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Linux下c++程序编译流程解析及静、动态库的创建和使用

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Linux下c++程序编译流程解析及静、动态库的创建和使用

C++程序编译流程

预编译

这个过程主要是处理源代码中以#开头的预编译指令,比如#include,#define等
#-o 选项指定生成的文件
g++ -E hello.cpp -o hello.i

编译

这个过程就是把预编译完的文件进行词法分析、语法分析、语义分析及优化后生成
相应的汇编代码
#直接编译上步生成文件或源文件都可
g++ -S hello.i -o hello.s
g++ -S hello.cpp -o hello.s

汇编

这个过程就是把汇编代码转换成机器码
g++ -c hello.s -o hello.o
g++ -c hello.cpp -o hello.o

链接

通过链接器将一个个目标文件(或许还会有库文件)链接在一起生成一个完整的可执行程序。
g++ 1.cpp 2.cpp -o hello.out  
g++ *.o -o hello.out 
g++ *.cpp -o hello.out
静态库的创建和使用

#创建
ar rcs libxxx.a xxx.o xxx.o
#使用
#在代码中引入头文件
#编译,g++命令通过 -L 选项指定静态库的路径,通过 -l 选项指定静态库名字,选项和参数有无空格都可
g++ main.c -o project -L path -l name
动态库的创建和使用

#创建
g++ -c -fpic xxx.cpp xxx.cpp
g++ -shared xxx.o xxx.o -o libxxx.so
#使用动态库编译的可执行文件,在执行时必须让操作系统找到相关的动态库才可以
#解决方法一 暂时添加
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/your/lib
#echo $LD_LIBRARY_PATH  查看指令
#解决方法二
gedit .bashrc
#最后添加
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/your/lib
#刷新环境变量
source .bashrc 
#或者
. .bashrc
#使用与静态相同
g++ main.c -o project -L path -l name
静态库的优缺点

动态库的优缺点


以上图片来源:https://www.nowcoder.com

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/664193.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号