【VM服务管家】VM4.0平台SDK_2.1环境配置类
目录
- 2.1.1 环境配置:CSharp二次开发环境配置方法
- 2.1.2 环境配置:Qt二次开发环境配置方法
- 2.1.3 环境配置:MFC二次开发环境配置方法
- 2.1.4 环境配置:VB.Net二次开发环境配置方法
- 2.1.5 环境配置:运行出现Vm.Core.Solution报错的解决方法
- 2.1.6 模块索引:MFC 模块索引异常解决办法
- 2.1.7 环境配置:报错序列不包含任何元素的解决方法
- 2.1.8 环境配置:提示未注册ActiveX控件的解决方法
- 2.1.9 控件失效:VM控件运行时不显示的解决方法
- 2.1.10 环境配置:Qt开发环境出现rc.exe无法启动报错解决办法
- 2.1.11 控件失效:添加引用后导致控件失效的解决方法
- 2.1.12 添加引用:在原有项目中新配置深度学习环境的方法
- 2.1.13 用户权限:普通用户权限以EXE方式启动Server的方法
- 2.1.14 引用工具:使用引用工具添加引用报错的解决方法
- 2.1.15 环境配置:句柄创建失败解决问题排查方法
2.1.1 环境配置:CSharp二次开发环境配置方法
描述
环境:VM4.0.0 + VS2015及以上
现象:C#二次开发环境的配置方法
解答
以WinForm为例,进行VM二次开发的环境配置分为三步:
第一步,使用VS新建一个框架为.NET Framework 4.6.1的工程,平台首选32位取消勾选,重新生成解决方案,保证工程Debug下存在exe文件,最后关闭新建工程。


第二步,将VM安装目录下的文件“\VisionMaster4.0.0\Development\V4.0.0 \ComControls\bin\x64”下整体拷贝到新建工程的Debug下。

第三步,启动二次开发导入工具(“\VisionMaster4.0.0\Development\V4.0.0 \ComControls\Tool\ImportRef.exe”),Module(sp)的路径在生成工程Debug下的Module(sp)文件夹,项目所在路径为bin文件的上一层,在选择完指定的路径之后,需要选择引用模块的dll以及是否选择相对路径,最后点击确定,完成环境配置。

另外,当用户是第一次配置环境时,工具箱中将没有VM相关控件,可按如下步骤进行添加。
(1)右击所有窗体,点击选择项。

(2)浏览当前项目路径的debug路径,Winform项目选择VMControls.Winform.Release.dll,最后点击确认。WPF应用程序则是选择VMControls.WPF.Release.dll

问题根因
不熟悉C#二次开发环境配置。
2.1.2 环境配置:Qt二次开发环境配置方法
描述
环境:VM4.0.0 + VS2019+Qt5.12.3
现象:Qt+VS二次开发环境如何配置?
解答
1 新建Qt工程,添加Qt模块Core、GUI、Active Qt和Container Widgets


2 拷贝DLL:VM\VisionMaster4.0.0\Development\V4.0.0\ComControl\bin\x64下的所有拷贝到项目工程输出目录下,如下图所示,项目的输出路径是Dll文件夹。


3 第一种方法:通过拷贝include文件及lib文件至项目工程中的方式配置VM环境
3.1 拷贝\VisionMaster4.0.0\Development\V4.0.0\includes下的头文件。

3.2 拷贝\VisionMaster4.0.0\Development\V4.0.0\ComControl\includes\QT下的头文件。

3.3 拷贝\VisionMaster4.0.0\Development\V4.0.0\libraries\win64\C下的所有库文件。

将以上三个文件夹拷贝到如下所示的项目路径中。

4 第二种方法:通过配置VC++目录和链接器的方式配置VM环境
4.1 VC++目录下包含目录添加以下路径:
1):\VisionMaster4.0.0\Development\V4.0.0\includes 2):\VisionMaster4.0.0\Development\V4.0.0\ComControl\includes\QT

4.2 库目录添加以下路径:
\VisionMaster4.0.0\Development\V4.0.0\libraries\win64\C

4.3 VC链接器附加依赖项写入iMVS-6000PlatformSDK.lib

5.配置完成:#include能索引到VM模块.h文件。

6 第一个VM界面:
6.1 添加容器控件QAxWidget:QAxWidget类是一个包装ActiveX控件的Qwidget,绑定VM控件到QAxWidget控件,VM相关控件在安装时已经注册到windows组件中。

6.2 创建方案句柄初始化控件:在ui界面布局相关控件后,创建VM方案句柄,初始化VM控件。
CreateSolutionInstance();
ui.axWidget->dynamicCall("GetObjectPointer()");
6.3 运行结果:

问题根因
不熟悉Qt二次开发环境配置。
2.1.3 环境配置:MFC二次开发环境配置方法
描述
环境:VM4.0.0 + VS2015及以上
现象:MFC二次开发环境如何配置?
解答
1 新建MFC工程,拷贝DLL:VM\VisionMaster4.0.0\Development\V4.0.0 \ComControl\bin\x64下的所有拷贝到项目工程输出目录下,如下图所示,项目的输出路径是Dll文件夹。


2 通过配置C++目录和链接器的方式配置VM环境
2.1 C++目录下添加附加包含目录.\Includes。

2.2 链接器下添加库目录.\Libraries\win64\C。

2.3 链接器输入里的附加依赖项写入VM的算法依赖库iMVS-6000PlatformSDK.lib

3 添加控件源文件至工程中,复制.\VisionMaster4.0.0\Development\V4.0.0\ComControls\Includes\VS2017(根据VS版本选择)下的控件源文件至工程目录下并引入到工程文件。


4 配置完成:#include能索引到模块.h文件。

5 第一个VM界面:
5.1 添加ActiveX控件,VM控件在安装时已注册如windows,可直接选择。

5.2 控件绑定与初始化
定义控件变量:
protected:CVmProcedureControlInterface m_ctrlProcedure;
控件绑定:
void CVMMFCApplication1Dlg::DoDataExchange(CDataExchange* pDX)
{CDialogEx::DoDataExchange(pDX);DDX_Control(pDX, IDC_VMUSERCONTROL1, m_ctrlProcedure);
}
控件初始化:
BOOL CVMMFCApplication1Dlg::OnInitDialog()
{CDialogEx::OnInitDialog();// 将“关于...”菜单项添加到系统菜单中。…// TODO: 在此添加额外的初始化代码try{m_ctrlProcedure.GetObjectPointer();}catch (CVmException e){}return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
5.3运行结果:

问题根因
不熟悉MFC二次开发环境配置。
2.1.4 环境配置:VB.Net二次开发环境配置方法
描述
环境:VM4.0+VS2015及以上
现象:使用Visual Basic语言来进行VM二次开发的环境搭建。
解答
Visual Basic进行VM二次开发的环境配置分为三步。
第一步,使用VS新建一个框架为.NET Framework 4.6.1,平台去勾选首选32为的工程,重新生成解决方案,保证工程Debug下存在exe文件,最后关闭新建工程;


第二步,将VM安装目录下的文件“\VisionMaster4.0.0\Development\V4.0.0\ComControls\bin\x64”整体复制拷贝到新建工程的Debug下;

第三步,添加工程引用,需要手动引用基本库和相关模块工具的dll;

第四步,修改APP.Config文件,拷贝了众多VM依托dll于项目的Debug目录下,还需要在项目的APP.Config中的privatePath上指明dll位置,因此需要客户对APP.Config中添加如下代码,完成整体环境配置。

问题根因
二次开发环境配置功能不熟悉。
2.1.5 环境配置:运行出现Vm.Core.Solution报错的解决方法
描述
环境:VM4.0.0 + VS2015及以上
现象:VM4.0.0环境配置运行出现Vm.Core.Solution报错。
解答
(1)检查加密狗有没有插好? 是否以管理员权限启动程序?首选32位是否取消勾选?
(2)查看VM4.0的版本信息是否为最新版本?版本信息为20220415以上,版本越新问题就会越少。如果打过最新补丁(截止20220505,最新补丁为20220505,建议用户打上最新补丁),则需要将打完补丁后的VisionMaster4.0.0\Development\V4.0.0\ComControls\bin\x64下面所有的文件全部替换到二次开发项目的EXE生成路径下(Debug下)。
(3)在任务管理器中关闭所有VM相关程序,这种操作可以在二次开发的初始化处用如下代码代替。(以防VM双开) 。
C#
KillProcess("VisionMasterServerApp");
KillProcess("VisionMaster");
void KillProcess(string strKillName)
{foreach(System.Diagnostics.Process p in System.Diagnostics.Process.GetProcesses()){if (p.ProcessName == strKillName){try{p.Kill();p.WaitForExit();}catch(Exception e){Console.WriteLine(e.Message.ToString());}}}
}
补充:
VM启动时,拉起来的进程有四个:VisionMaster.exe,VisionMasterServer.exe,VisionMasterServerAPP.exe,VmModuleProxy.exe;
VM SDK程序启动时,拉起来的进程有两个:VisionMasterServer.exe,VmModuleProxy.exe;
所以,只需要结束VisionMaster.exe和VisionMasterServerAPP.exe进程即可。
(4)检查VM安装环境是否正常?运行VisionMaster4.0.0\Applications\Tools目录下的EnvironmentDetectionTool.exe。
(5)如果这期间打开过多个版本的VM,可以试一下重启电脑或打开相应版本的VM来拉起相应版本的服务。
(6)是否严格按照环境步骤来配置环境?是使用ImportRef工具添加引用,针对一个项目,工具只使用一次。
问题根因
不熟悉如何排查报错原因
2.1.6 模块索引:MFC 模块索引异常解决办法
描述
环境:VM4.0.0 + VS2015及以上
现象:文件编码格式为UTF-8 不带签名编码格式,模块索引会出现 模块无法找到异常


解答
更改文件类型为UTF-8 带签名格式或vs默认GBK2312 编码格式

问题根因
不熟悉引用库环境配置。
2.1.7 环境配置:报错序列不包含任何元素的解决方法
描述
环境:VM4.0.0+VS2015及以上
现象:配置环境后,获取线线测量模块结果,报错“序列不包含任何元素”。如下图所示:

解答
将“\VisionMaster4.0.0\Development\V4.0.0 \ComControls\bin\x64”下整体重新拷贝。
问题根因
相关依赖库未拷贝。
2.1.8 环境配置:提示未注册ActiveX控件的解决方法
描述
环境:VM4.0.0 +VS2015及以上
问题:如何解决MFC插入VM的控件时,报错未注册ActiveX控件的问题,报错截图如下:


解答
关闭VS后,重新注册VM控件,注册步骤如下:
10解注册VM控件,找到如下的win64路径下,右键以管理员权限运行ComUnRegister.bat执行解注册。
2)注册VM控件,找到如下的win64路径下,右键以管理员权限运行ComRegister.bat执行注册。
3)对win32文件夹下的两个文件重复上述操作。


问题根因
不了解如何注册VM控件。
2.1.9 控件失效:VM控件运行时不显示的解决方法
描述
环境:VM4.0.0 + VS2015及以上
现象:编译成功后,没有报错,运行之后VM控件是黑色的,不显示任何内容。如下图右边的黑色区域所示。

解答
此时为环境配置错误,确定本地VM是否是最新版本,然后将本地VM的路径(如:D:\VM4.0\VisionMaster4.0.0\Development\V4.0.0\ComControls\bin\x64)下的所有文件复制到项目路径的Debug文件下。
问题根因
不熟悉全局变量工具及其接口。
2.1.10 环境配置:Qt开发环境出现rc.exe无法启动报错解决办法
描述
环境:VM4.0.0 + VS2015+Qt5.9.9
现象:编译出现rc.exe 无法启动
解答
-
找到WindowsSDK 的x86 目录下的rc.exe 以及rcdll.dll 文件

-
复制到VS bin 目录下

问题根因
系统问题
2.1.11 控件失效:添加引用后导致控件失效的解决方法
描述
环境:VM4.0.0 + VS2015及以上
现象:在VM二次开发中,有些引用需要手动添加,如引用VMControls.WPF.dll进行在渲染控件上绘图。但是,在添加之后运行项目,界面上的VM控件区失效,如下图所示的vmProcedureConfigControl、vmRenderControl和vmGlobalToolControl。

解答
因为VM的引用都是采用相对路径的方式,如果此时是从VM的安装路径中来添加相加的引用,则需要打开当前引用的dll的属性,将复制本地改为False,如下图所示:

问题根因
不熟悉VM二次开发中的引用。
2.1.12 添加引用:在原有项目中新配置深度学习环境的方法
描述
环境:VM4.0.0 + VS2015及以上
现象:在VM没有装深度学习模块时搭建了二次开发项目,后来项目中需要应用到深度学习。VM中可以很方便的安装深度学习模块,那么如何在原有的项目中配置深度学习模块的dll呢?
解答
在原有项目中新配置深度学习环境的步骤如下所示:
1、VM中安装好深度学习模块后,将本地VM路径下\VM4.0\VisionMaster4.0.0\Development\V4.0.0\ComControls\bin\x64的dll全部拷贝到项目的debug下。
2、手动添加引用项目debug下Module(sp)\x64\DeepLearning相应文件里面的dll, C代表CPU。

注意手动添加后,引用的属性立马修改(复制本地路径为false)。为true时,debug就会有刚刚复制过来的dll,debug\Module(sp)\x64下的文件夹中也有,代码就会找不到。如果debug下已经有了,就要删除掉。

3、修改app.config,在<probing privatePath=>的后面添加相应的深度学习的相对路径Module(sp)\x64\DeepLearning\ IMVSCnnClassifyModuC
4、注意,其它模块手动添加引用的步骤类似,但是由于手动添加引用的步骤比较复杂,且对于模块以外的dll很难添加齐全,所以推荐使用引用工具来添加引用(“\VisionMaster4.0.0\Development\V4.0.0 \ComControls\Tool\ImportRef.exe”),且对于一个项目只使用一次工具。
问题根因
不熟悉环境配置
2.1.13 用户权限:普通用户权限以EXE方式启动Server的方法
描述
环境:VM4.0.0 + VS2015及以上
现象:当客户二次开发程序,需要以Windows普通用户权限调用Vm做视觉处理,需要将Server以EXE方式启动。
解答
1)安装VM20220415的安装包,然后安装补丁包(截止20220505,最新补丁为20220505,建议用户打上最新补丁)。如果VM4.0维护版2022年5月份之后的有完整包,直接安装即可,不用安装补丁包。
2)修改二次开发程序的xxx.exe.config配置文件,在“AppSettings”里面增加以下两条信息。下图以圆查找demo程序为例。注意“ServerPath”是该电脑上Server的绝对路径,要填正确。


问题根因
不熟悉普通用户权限二次开发的配置。
2.1.14 引用工具:使用引用工具添加引用报错的解决方法
描述
环境:VM4.0.0 +VS2015及以上
现象:在VM4.0的二次开发环境配置中,ImportRef可以帮助用户为项目自动添加引用,但有时会报错缺少mfc120u.dll。

解答
这个问题可以直接运行VM安装路径下的驱动MSVBCRT.AIO_v2020.05.20.exe解决:

问题根因
不熟悉VM自带的驱动。
2.1.15 环境配置:句柄创建失败解决问题排查方法
描述
环境:VM4.0.0 + VS2015及以上
现象:VM 二次开发执行CreateSolutionInstance() 出现句柄错误问题。
解答
问题截图如下:

解决办法:
- VM平台软件如果开启,需要关闭退出。
- VS未开启管理员权限。
- 加密狗未插上,或未安装驱动。
问题根因
不熟悉VM 二次开发流程。
相关文章:
【VM服务管家】VM4.0平台SDK_2.1环境配置类
目录 2.1.1 环境配置:CSharp二次开发环境配置方法2.1.2 环境配置:Qt二次开发环境配置方法2.1.3 环境配置:MFC二次开发环境配置方法2.1.4 环境配置:VB.Net二次开发环境配置方法2.1.5 环境配置:运行出现Vm.Core.Solution…...
最新研究:可审计的具有拜占庭鲁棒的联邦学习方案
Y. Liang, Y. Li and B. -S. Shin, “Auditable Federated Learning With Byzantine Robustness,” in IEEE Transactions on Computational Social Systems, doi: 10.1109/TCSS.2023.3266019. 可免费下载:https://download.csdn.net/download/liangyihuai/87727720…...
JDK1.8下载、安装和环境配置教程
🎉🎉🎉点进来你就是我的人了博主主页:🙈🙈🙈戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔🦾🦾 目录 window系统安装java 下载JDK 配置环境变量 …...
天津超算,青索帮助文档
连接 第一步,点击 配置VPN(切换到局域网用)和机器(也就是各套超算系统)。 第二步,点击 机器 选择对应的机器。通常会在下方显示可用的机器,单击其中一个即可。如果只有一个机器,…...
SpringMVC的拦截器和异常处理器
目录 lerInterceptor 拦截器 1、拦截器的作用 2、拦截器的创建 3、拦截器的三个抽象方法 4、拦截器的配置 5、多个拦截器的执行顺序 SpringMVC的异常处理器 1、异常处理器概述 2、基于配置文件的异常处理 3、基于注解的异常处理 lerInterceptor 拦截器 1、拦截器的作…...
查看库文件是32位还是64位|查看lib是静态库还是导入库|判断是debug模式还是release模式
文章目录 dll位数查看lib位数查看查看lib库是静态库还是导入库dll库文件信息查看lib库文件内容查看dll库查看编译模式是debug还是release方法一方法二方法三 lib静态库查看编译模式是debug还是release方法一方法二 lib导入库查看编译模式是debug还是release查看Linux下的.a库&a…...
Python小姿势 - Python爬取数据的库——Scrapy
Python爬取数据的库——Scrapy 一、爬虫的基本原理 爬虫的基本原理就是模拟人的行为,使用指定的工具和方法访问网站,然后把网站上的内容抓取到本地来。 爬虫的基本步骤: 1、获取URL地址: 2、发送请求获取网页源码; 3、…...
[C++初阶]栈和队列_优先级队列的模拟实现 deque类 的理解
为了更好的理解优先级队列priority_queue,这里会同时进行栈和队列的提及 文章目录 简要概念(栈和队列)栈和队列的模拟实现与使用stack(栈)deque的理解和操作queue priority_queue(优先级队列)框…...
Spring是什么?关于Spring家族
初识Spring 什么是Spring? Spring是一个开源的Java企业级应用程序开发框架,由Rod Johnson于2003年创建,并在接下来的几年里得到了广泛的发展和应用。它提供了一系列面向对象的编程和配置模型,支持开发各种类型的应用程序&#x…...
自然语言处理数据集集锦(持续更新ing...)
诸神缄默不语-个人CSDN博文目录 最近更新时间:2023.4.26 最早更新时间:2023.4.25 文本摘要主题的数据集见我之前写的另一篇博文:文本摘要数据集的整理、总结及介绍(持续更新ing…) 智能司法主题的数据集我准备等项目…...
93、Dehazing-NeRF: Neural Radiance Fields from Hazy Images
简介 论文:https://arxiv.org/pdf/2304.11448.pdf 从模糊图像输入中恢复清晰NeRF 使用大气散射模型模拟有雾图像的物理成像过程,联合学习大气散射模型和干净的NeRF模型,用于图像去雾和新视图合成 通过将NeRF 3D场景的深度估计与大气散射模…...
JAVA子类与继承
目录 JAVA子类与继承 一、子类与父类: 二、子类与对象 三、成员变量的隐藏和方法重写 四、super关键字(P122) 五、final关键字 六、对象的上转型对象(P126) 七、继承与多态(P128) 八、abstract类和…...
62 openEuler 22.03-LTS 搭建MySQL数据库服务器-管理数据库
文章目录 62 openEuler 22.03-LTS 搭建MySQL数据库服务器-管理数据库62.1 创建数据库示例 62.2 查看数据库示例 62.3 选择数据库示例 62.4 删除数据库示例 62.5 备份数据库示例 62.6 恢复数据库示例 62 openEuler 22.03-LTS 搭建MySQL数据库服务器-管理数据库 62.1 创建数据库…...
【分布式搜索引擎ES01】
分布式搜索引擎ES 分布式搜索引擎ES1.elasticsearch概念1.1.ES起源1.2.倒排索引1.2.1.正向索引1.2.2.倒排索引 1.3.es的一些概念1.3.1.文档和字段1.3.2.索引和映射1.3.3.mysql与elasticsearch 1.4.1安装es、kibana、IK分词器1.4.2扩展词词典与停用词词典 2.索引库操作2.1.mappi…...
1.3 鞅、停时和域流-鞅(布朗运动与随机计算【习题解答】)
Let X = ( x n , F n ) , n = 1 , ⋯ , N X=\left(x_n, \mathcal{F}_n\right), n=1, \cdots, N X...
十、ElasticSearch 实战 - 源码运行
一、概述 想深入理解 Elasticsearch,了解其报错机制,并有针对性的调整参数,阅读其源码是很有必要的。此外,了解优秀开源项目的代码架构,能够提高个人的代码架构能力 阅读 Elasticsearch 源码的第一步是搭建调试环境&…...
GPT-3 论文阅读笔记
GPT-3模型出自论文《Language Models are Few-Shot Learners》是OpenAI在2020年5月发布的。 论文摘要翻译:最近的工作表明,通过对大量文本进行预训练,然后对特定任务进行微调(fine-tuning),在许多NLP任务和基准测试上…...
方案解析丨数字人主播如何成为电商直播新标配
浙江省政府办公厅近日印发《关于进一步扩大消费促进高质量发展若干举措》支持电子商务直播发展。抢抓电子商务直播快速发展机遇,发展数字人虚拟主播、元宇宙新消费场景等新业态新模式。 随着电商直播快速发展,企业怎么高效地实现引流获客,成为…...
Python最全迭代器有哪些?
python中迭代器的使用是最广泛的,凡是使用for语句,其本质都是迭代器的应用。 从代码角度看,迭代器是实现了迭代器协议的对象或类。迭代器协议方法主要是两个: __iter__()__next__() __iter__()方法返回对象本身,他是…...
ESP32 网络计时器,包含自动保存
简介 本代码是基于ESP32开发板实现的一个计时器功能,具备倒计时、计时器时长选择、显示当前时间、有源蜂鸣器报警等功能。代码中使用了WiFi网络连接、NTP时间同步、EEPROM存储等功能。通过按钮控制计时器的开始、停止和计时器时长的选择。 运行原理概述 在ESP32开…...
C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...
基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用
文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...
【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...
HTML前端开发:JavaScript 获取元素方法详解
作为前端开发者,高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法,分为两大系列: 一、getElementBy... 系列 传统方法,直接通过 DOM 接口访问,返回动态集合(元素变化会实时更新)。…...
面试高频问题
文章目录 🚀 消息队列核心技术揭秘:从入门到秒杀面试官1️⃣ Kafka为何能"吞云吐雾"?性能背后的秘密1.1 顺序写入与零拷贝:性能的双引擎1.2 分区并行:数据的"八车道高速公路"1.3 页缓存与批量处理…...
