巴中区建设局网站,广州建筑集团官网首页,做消费金融网站价格,网站建设和技术服务合同个人主页#xff1a;chian-ocean
文章专栏
前言#xff1a; GCC#xff08;GNU Compiler Collection#xff09;是一个功能强大的编译器集合#xff0c;支持多种语言#xff0c;包括 C 和 C。其中 gcc 用于 C 语言编译#xff0c;g 专用于 C 编译。 Linux GCC or G的安…个人主页chian-ocean
文章专栏
前言 GCCGNU Compiler Collection是一个功能强大的编译器集合支持多种语言包括 C 和 C。其中 gcc 用于 C 语言编译g 专用于 C 编译。 Linux GCC or G的安装
安装 GCC
运行以下命令安装 GCC
sudo yum install -r gcc安装完成后可以再次检查版本
gcc --version安装G
运行以下命令安装 GCC
sudo yum install -r g安装完成后可以再次检查版本
g --versionLinux的代码编译
预处理Preprocessing
预处理的工作
去掉注释展开头文件条件编译宏替换
C代码执行
g -E code.cpp -o code.i
# 可以生成与处理文件生成.i文件编译Compilation
编译器将预处理后的源代码转换为汇编代码文本形式的机器指令。
生成汇编代码通常是 .s 文件。编译器会进行语法分析和语义检查。
g -S code.i -o code.s
# 可以生成与处理文件生成.s文件汇编Assembly
汇编器将汇编代码.s 文件转换为二进制的目标代码.o 文件。
汇编代码被转换为机器能够理解的指令。生成目标文件通常是 .o 或 .obj 文件。
g -E code.s -o code.0
# 可以生成与处理文件生成.0文件
od filename # 可以进行查看链接Linking
函数库Library简介
在编程中函数库是指封装了一组可重用函数、类或其他代码模块的集合目的是简化开发、提高代码复用性。函数库通常以静态库*.a 或 *.lib或动态库*.so、*.dll 或 *.dylib的形式存在。 类型描述静态库在编译时将库的代码嵌入到可执行文件中生成的文件独立运行不依赖外部库。动态库在运行时加载库文件节省空间和内存可以被多个程序共享。
动态链接
动态库Dynamic Library是一种在运行时加载的库可以被多个程序共享以节省存储空间和内存。动态库的文件扩展名在不同操作系统中有所不同
Linux: .soShared ObjectWindows: .dllDynamic Link LibrarymacOS: .dylib
ldd #可以查看可执行程序所依赖的动态库下面是code可执行文件所以来的动态库 静态链接
静态库是一种将一组目标文件.o 文件打包成单个文件通常扩展名为 .a 或 .lib的技术便于代码复用。静态库在编译时链接到可执行文件中因此运行时不需要额外的库支持。
Linux: .aWindows: .lib
g code.cpp -static -o code-static # 可以生成静态链接动态VS静态
定义
链接方式定义静态链接在编译阶段将所需库的代码嵌入到可执行文件中生成一个独立的可执行文件。动态链接在运行时加载所需的库动态库可执行文件只包含对库的符号引用库本身存储在外部文件中如 .so。
操作系统命名
操作系统静态库扩展名动态库扩展名Linux.a.soWindows.lib.dllmacOS.a.dylib
对比表
特性静态链接动态链接生成的可执行文件大小较大嵌入所有库代码较小仅包含对动态库的引用运行时依赖无需外部库独立运行需要动态库文件运行效率高无需加载外部库直接执行稍低运行时加载动态库内存使用每个程序独立占用库的代码和数据多个程序共享同一动态库更新维护更新库后需重新编译程序更新库后程序无需重新编译部署和兼容性部署简单无需额外的动态库部署复杂需要确保动态库存在并与程序兼容符号冲突不易出现因为库代码独立嵌入到每个可执行文件中可能出现多个库之间的符号冲突和兼容性**部署简单无需额外的动态库部署复杂需要确保动态库存在并与程序兼容符号冲突不易出现因为库代码独立嵌入到每个可执行文件中可能出现多个库之间的符号冲突适用场景嵌入式系统、小型独立工具、运行环境固定的场景大型系统、需要频繁更新库或共享库的场景