首页 > 编程语言 >C++常见面试题整理

C++常见面试题整理

时间:2024-01-20 10:34:19浏览次数:38  
标签:可执行文件 文件 面试题 objdump 常见 C++ filename 编译 链接

1. CPP编译链接过程

img

预处理
处理以#开头的命令,纯文本替换,类型不安全

#pragma lib#pragma link除外,#pragma lib用于指定要链接的库,
#pragma link用于指定程序入口(默认入口是main函数,但可以通过该命令修改)
都是在链接阶段进行处理

编译
词法分析,语法分析,代码优化,编译生成相应平台的汇编代码

汇编
将汇编代码转成特定平台的机器码,生成二进制可重定位的目标文件(*.obj),

链接
链接编译完成的所有.obj文件和静态库文件,分两步

  1. 所有.obj文件段的合并,其中符号表段合并后,进行符号解析
  2. 符号的重定位(重定向),这是链接的核心,最终生成可执行文件

可以参考书籍《深入理解计算机系统》第7章 链接的相关内容

相关的命令:

g++ 编译的相关命令,可以使用-E-S-c分别对源代码进行预处理,编译,汇编,分别生成对应的文件

命令 描述
g++ -E source_filename.cpp -o output_filename.i 生成预处理后的 CPP 源文件(.i 文件)
g++ -S source_filename.cpp -o output_filename.s 生成汇编代码文件(.s 文件)
g++ -c source_filename.cpp -o output_filename.o 生成目标文件(.o 文件)

objdump 可用于查看目标文件或可执行文件的一些信息

命令 描述
objdump -d 可执行文件 反汇编可执行文件,显示其汇编代码
objdump -t 可执行文件 显示可执行文件的符号表
objdump -r 可执行文件 显示可执行文件的重定位表
objdump -s 可执行文件 显示可执行文件的完整节(section)内容
objdump -h 可执行文件 显示可执行文件的节头表信息
objdump -x 可执行文件 显示可执行文件的全部信息

img

img

标签:可执行文件,文件,面试题,objdump,常见,C++,filename,编译,链接
From: https://www.cnblogs.com/ericling0529/p/17976116

相关文章

  • SQL常见面试题(测试工程师)
    用一条 SQL 语句 查询出每门课都大于 60 分的学生姓名。表 scores 如下SELECTname,MIN(score)ashigtfromstudent_scoressgroupbynameHAVINGhigt>60用一条 SQL 语句 查询两门以上不及格课程的同学的学号姓名以及其平均成绩, 并按成绩排序SELECT......
  • C++11原子变量:线程安全、无锁操作的实例解析
     在C++11中,原子变量(std::atomic)提供了一种线程安全的方式来操作共享变量。下面是一个简单的例子,演示了C++11原子变量的用法。#include<iostream>#include<atomic>#include<thread>std::atomic<int>counter(0);//声明一个原子整数变量voidincrementCounter(int......
  • C++ opencv计算两个cv::Rect的重复面积
    C++ opencv计算两个cv::Rect的重复面积  #include<opencv2/opencv.hpp>#include<iostream>intmain(){//创建两个矩形cv::Rectrect1(10,10,50,50);//(x,y,width,height)cv::Rectrect2(30,30,50,50);//检查两个矩形是否重叠......
  • c++函数默认参数及占位参数
    一.函数默认参数在c++中,函数形参列表中的形参是可以有默认值的语法:如果我们自己传入数据,就用自己的数据,如果没有,就用默认值注意:1.如果某个位置参数有默认值,那么从这个位置往后,从左往右,必须都要有默认值2.如果函数声明有默认值,函数实现的时候就不能有默认参数。(声明和实现只......
  • c++引用
    一.引用的基本使用作用:给变量起别名语法:数据类型&别名=原名二.引用注意事项引用必须初始化引用在初始化后,不可以改变三.引用做函数参数作用:函数传参时,可以利用引用技术让形参修饰实参优点:可以简化指针修饰实参四.引用做函数返回值注意:1.不要返回局部变量的引用......
  • 浅谈C++简单前缀和实现
    浅谈前缀和2023.9.28\(tips:\)文章持续更新中,欢迎关注\(upd:\)文章从洛谷博客迁移至博客园(\(2024.1.19\))洛谷B3612【深进1.例1】求区间和题目大E:有一个内部元素个数为\(n\)的数组\(a\),现在有m次询问,求a[l]到a[r]之间所有元素的和朴素的做法:#include<iostream>usin......
  • C++-类和对象(1)
    引言:C++语言兼容C语言的基础上,更多的是面向对象进行编程,即相较于事务处理的流程,更侧重于处理过程中涉及到的类以及对象。今天向大家分享C++中的类与对象相关知识。1.类的定义:常使用class关键字定义一个类:由两部分构成,分别是成员属性和成员函数。classclassName//类名{//成员......
  • C++中对象作为函数参数进行传参
    在C++语言环境中,对象是类的一个实例。 有三种方式:1、直接使用对象作为函数参数,形参和实参是不同的对象,它们所占地址空间不同,因此形参的改变并不影响实参的值。2、传入指向对象的指针作为函数参数,所谓“传址调用”,就是在函数调用时使用实参对象的地址,形参和实参都指向同一个地......
  • CAN总线协议简介及其常见的应用领域
    CAN总线协议是一种串行通讯协议,主要用于汽车和工业自动化领域,实现了实时应用的需求。首先,CAN总线协议的基本概念包括报文、信息路由和位速率。在CAN系统中,总线上传输的信息以不同格式的报文发送,但长度有限。CAN总线的位速率根据系统的不同而不同。其次,CAN总线协议具有多主控制的特......
  • 车载视频JT1078协议视频接入(C++)
    把之前做的JT1078协议车载视频接入进行文档整理如下:-----------------------------------------------------------------------------------------------一。背景;平台能够通过jt808协议接入车辆GPS定位信息的基础上,扩展车载视频JT1078协议的接入。实现车辆位置信息和视频信......