- 博客(172)
- 资源 (16)
- 收藏
- 关注
原创 动态库程序中文件dll、lib、exp、pdb之间的关系
lib 文件的生成依赖于 exp 文件,exp 文件中记录的导出符号等信息用于生成 lib 文件。在调试时,pdb 文件与 lib 文件配合,帮助开发人员理解程序中对 dll 的调用关系及调试相关问题。与其他文件关系:与 dll 紧密相关,在调试 dll 代码时,调试器需要 pdb 文件来将 dll 中的二进制指令与源代码关联起来。在链接阶段,pdb 文件与 lib 文件等配合,虽然 pdb 文件不直接影响链接过程,但在调试通过链接生成的可执行程序(调用 dll)时,pdb 文件提供了重要的调试辅助信息。
2025-01-07 15:17:41
356
原创 VS使用gtest调试程序,vs的调试里面的命令参数该怎么填写
假设在MathFunctionsTestSuite中有一个测试用例名为AdditionTest,要运行这个特定的测试用例,就在命令参数中填写–gtest_filter=MathFunctionsTestSuite.AdditionTest。例如,如果你有一个测试套件名称为MathFunctionsTestSuite,想要运行这个套件中的所有测试用例,在 VS 的调试命令参数中填写–gtest_filter=MathFunctionsTestSuite.参数:通常不需要特殊的命令参数来运行所有测试用例。
2024-12-11 17:43:35
375
原创 程序员职业生涯总结之设计自己的人生算法
2、多去尝试,积累各种各样的体验和选择,等三十岁大脑的选择中枢完全成熟的时候,可以有更多的出路去选择。4、用好自己的人生算法,并且在成长的路上不断的迭代进化,三五年后,我必然成为让自己当初骄傲的人。回顾过去的五年,越发感觉选择成为程序员这条路以来,我一直是幸运的!3、多看书,多出去走走,给自己定期充电,提高自己的思想认知。今天又是一年一度的程序员节日了,给自己放了一天假!放眼未来,充满挑战,人生需要满怀激情的去发挥自己。5、基于以上几点,逐步摸索、形成个人认知和决策系统。1、找机会创业或者积累创业的资源。
2024-10-24 18:07:41
239
1
原创 职业生涯阶段总结3:转眼毕业三年
在行情越发下滑的形势,似乎只有进大厂才能拿到不错的收入,但是大厂的压力也是比较大的,有时是在孵化业务的预研项目里面,特别容易内卷。看到过同学跳槽以及被优化,我也决定看看自己的水平,面试了几家头部互联网大厂,都过了二面,基本功扎实,后面的几轮面试逐渐反应出一个问题,项目经历和所招岗位不是很匹配,因为一直在制造业大厂做软件开发,切换到互联网大厂,项目经历不是很符合要求了;我对软件职业的态度要发生改变,要真正的发自内心的热爱,才能完成别人所不能完成的事情;信息的收集和整理,向上汇报的能力相比更加重要的;
2024-08-03 10:57:33
366
原创 VS安装Qt扩展工具
打开Visual Studio,在菜单栏上选择【Qt VS Tools】,并选择打开【Qt Options】,在打开的选项窗口中,点击“Add”按钮,在弹出窗口中点击浏览按钮,添加已经安装的Qt中的MSVC编译器路径;(1)创建一个Qt项目或者打开一个项目只要含有.ui文件就行,右键点击ui文件,选择“打开方式”,添加Qt中Designer.exe的路径,并且设置为默认即可;**插件下载地址:**http://download.qt.io/development_releases/vsaddin/
2024-07-10 10:08:36
1213
原创 遇到多套编译器环境混乱导致系统头文件的包含错误
包含的系统头文件找不到:例如使用某个库(如gstreamer)里面用到的C++的系统头文件找不到;但你点击的时候是可以打开包含的头文件的,可以看到内容,但无法被系统识别出来这个文件所在的路径。这个时候需要先删除一套文件路径,整理清 编译器的路径等各种path的配置。说明同名的头文件系统有两套,一套是msvc的,一套是mingw的;系统识别出来的头文件路径,与默认使用的头文件路径不一致;
2024-04-23 20:35:19
183
2
原创 VS 工程只生成dll不生成lib的解决方法
原因可能是定义类时,忘记了加__declspec(dllexport)声明;VS 工程只生成dll不生成lib的解决方案;如何不是这个原因请参考上一篇文章的内容;
2024-02-27 10:55:29
1059
原创 使用Visual Studio编译并导出一个C++库,比Qt要简单
在弹出的对话框中,选择"Visual C++" -> “C++文件(.cpp)”,然后点击"添加"。然后,选择"配置属性" -> “常规” -> “配置类型”,将其设置为"动态库(.dll)"。默认情况下,它们位于项目文件夹下的"Debug"或"Release"文件夹中,具体取决于你的构建配置。创建一个新的空项目:在Visual Studio中,选择"文件" -> “新建” -> “项目”,然后选择"Visual C++" -> “空项目”。给项目起一个名称,设置好项目的位置,然后点击"确定"。
2024-02-26 21:36:52
1114
2
原创 VS引用第三方库
使用Qt开发习惯了,切换来VS环境,居然引用第三方库,都有所不适应;因为之前都是再pro文件里面直接手写配置好第三方库的include目录、lib目录和拷贝dll语句.第二步,在项目的属性设置中,进入"链接器" -> “常规” -> “附加库目录”,点击编辑,然后添加第三方库的目录(lib文件所在路径)第三步,在"链接器" -> “输入” -> “附加依赖项”,添加你要链接的对应的库文件名称(不需要完整路径,只需要文件名)。第一步,先包含第三方库的include目录(头文件所在目录)
2024-02-19 16:43:09
1347
原创 CMake编译JSONCPP库
请注意,这只是一个简单的示例,您可能需要根据您的项目的实际情况进行适当的修改。此外,具体的 CMake 配置可能会因项目而异,您可能需要参考 JSONCPP 的文档或其他示例来了解如何正确配置 JSONCPP 的构建过程。JSONCPP 提供了 CMake 构建系统的支持,您可以使用 CMake 生成适用于您的平台的构建文件。在您的 C++ 代码中包含 JSONCPP 的头文件,并使用 JSONCPP 的功能进行 JSON 数据的解析和生成。这将使用生成的构建文件来编译和构建您的项目。
2024-02-05 17:28:57
1355
原创 怎么建立自己获取真实新闻信息的渠道
验证信息来源:当阅读新闻时,尽量查看信息的来源,特别是匿名消息或未经证实的消息。可信的新闻报道通常会引用可靠的来源,如官方声明、专家评论或调查报告。总之,建立自己获取真实新闻信息的渠道需要耐心和批判思维。通过多渠道获取信息、验证来源、对比观点和提高媒体素养,可以帮助我们更好地辨别真实的新闻信息。可以查看媒体的历史和信誉评价,了解其报道的客观性和准确性。了解新闻报道的基本原则和伦理标准,学会识别偏见和虚假信息。对比多方观点:了解不同媒体对同一事件的报道,比较不同观点和解读,从而获得更全面和客观的信息。
2024-02-01 17:21:04
1003
原创 解决Qt的release构建下无法进入断点调试的问题
因此,如果你不需要进行详细的调试,或者对文件大小有严格的要求,可以考虑在Release构建中禁用生成调试信息的选项。在工作的时候遇到了第三方库只提供release版本的库的情况,我需要在这基础上封装一层自家库,在调试的时候遇到如下问题,但是在Qt环境下,release的库只能在进行release构建和调试。首先理解调试的必备条件,无论是VS环境,还是Qt环境下,都需要pdb文件(),debug模式下默认生成这个,但是release模式下,不一定会生成这个。完成构建后,在指定的路径下应该会生成PDB文件。
2024-01-15 21:09:12
1450
2
原创 C++的内存管理模型
需要注意的是,C++提供了一些内存管理工具和技术,如智能指针(Smart Pointers)和RAII(Resource Acquisition Is Initialization)等,可以帮助程序员更方便地进行内存管理,减少内存泄漏的风险。这些工具和技术可以自动处理内存的分配和释放,减轻了程序员手动管理内存的负担。通过指针,程序员可以间接访问和操作内存。程序员可以使用指针来动态分配和释放内存,也可以使用指针进行内存的拷贝和移动。C++的内存管理模型是基于手动内存管理的,即程序员需要显式地分配和释放内存。
2024-01-11 19:34:00
546
原创 怎么形象化理解线程
线程就像工人,可以同时执行多个任务,通过协作和同步来完成复杂的工作。想象一个大型的工厂:假设我们有一个大型的工厂,里面有多个车间和多个工人。线程的生命周期:线程有自己的生命周期,从创建、启动、执行任务,到结束和回收资源。线程的创建就像雇佣一个新的工人,而线程的结束就像工人完成任务后离开工厂。将线程比喻为人类的工作方式:我们可以将线程想象成人类的工作,每个线程就像一个人,可以独立地执行任务。这就是线程之间的通信和资源共享。并发执行:在工厂中,每个车间的工人可以同时进行工作,不需要等待其他车间的工作完成。
2024-01-08 15:23:29
401
原创 Qt中pro文件书写规则1
为空的情况下,从工程文件夹位置和当前"procommon.pri"文件位置获取子文件夹名,然后从输出位置文件和子文件夹名获取编译目录,并将结果赋值给。,表示当前.pro文件所在的目录的路径。然后,使用正则表达式替换操作符。,表示输出位置文件的路径。然后,再次使用正则表达式替换操作符。为空,那么执行花括号内的代码块。这段代码是一个条件语句,判断。的值进行替换,将其中匹配到的。的值进行替换,将其中匹配到的。总结起来,这段代码的作用是在。在代码块中,首先定义了变量。
2024-01-04 09:43:14
547
原创 Qt中的强制类型转换
reinterpret_cast:用于进行底层的位级别的类型转换,可以将任何指针类型转换为其他指针类型,也可以将任何整数类型转换为指针类型,但是使用时需要非常小心,因为它的行为不受类型系统的限制。类型转换:static_cast可以将一种类型转换为另一种类型,如将指针或引用从一个类转换为其基类或派生类,或者将数值类型转换为另一种数值类型。转换指针类型:static_cast可以将指针类型转换为另一种指针类型,但是需要注意的是,这种转换只能在具有继承关系的类之间进行。
2024-01-02 15:09:24
1266
原创 C++基础普及:如何学好常用的数据结构
理解底层原理:了解数据结构的底层实现原理,包括内存分配、指针操作等。链表(Linked List):由节点组成的数据结构,每个节点包含数据和指向下一个节点的指针。队列(Queue):一种先进先出(FIFO)的数据结构,只能在队尾插入元素,在队首删除元素。阅读源码和学习库:阅读开源项目或标准库中关于数据结构的实现代码,学习优秀的设计和实现方式。栈(Stack):一种后进先出(LIFO)的数据结构,只能在栈顶进行插入和删除操作。树(Tree):一种非线性的数据结构,由节点和边组成,每个节点可以有多个子节点。
2023-12-28 16:26:44
744
原创 多线程和锁、互斥量的概念的理解比喻
这个比喻更加贴切,因为厕所的使用是我们日常生活中非常熟悉的场景,人们需要共享一个资源(厕所),但是不能同时进入。每个人需要等待前一个人使用完毕后才能进入,这种等待和争夺资源的行为就类似于多线程环境中的互斥量和锁的作用。通过这个比喻,可以更加形象地理解多线程中的并发访问和保护共享资源的概念。人:可以看作是线程,每个人需要访问和使用厕所来完成自己的任务。在多线程环境中,厕所代表需要被保护的共享数据。比喻的目的是通过类比的方式将抽象的概念转化为更具体、形象的概念,虽然比喻不是很好,但感觉比较接近。
2023-12-28 10:27:10
419
原创 理解C++中的std::mutex
提供了互斥锁的基本功能,即同一时间只允许一个线程访问被保护的共享资源。当一个线程获取了互斥锁后,其他线程会被阻塞,直到该线程释放锁。通过使用互斥锁,我们确保了同时只有一个线程能够访问共享资源,避免了数据竞争和不一致的问题。时,要确保在所有线程中正确地获取和释放锁,以避免死锁和其他并发问题。等RAII封装类来简化互斥锁的使用,确保锁的自动释放,提高代码的可读性和可维护性。是C++标准库提供的互斥锁类,用于保护共享资源的并发访问。的RAII封装类,会在函数结束时自动释放锁。需要注意的是,在使用。
2023-12-25 10:05:18
567
原创 C++中的资源管理技术---RALL
RAII的核心思想是:在对象的构造函数中获取资源,在对象的析构函数中释放资源,从而确保资源在对象的生命周期内始终可用,并且在对象不再需要时能够正确释放。通过使用RAII,我们可以更方便地管理资源,提高代码的可读性和可维护性,并避免资源泄漏和异常导致的问题。简化资源管理:通过将资源的获取和释放操作封装到对象的构造函数和析构函数中,可以避免手动管理资源的复杂性。异常安全性:由于资源的获取和释放操作都在对象的构造函数和析构函数中完成,即使在发生异常时,也能保证资源的正确释放。在上述示例中,我们定义了一个。
2023-12-25 09:55:01
558
原创 怎么理解std::unique_lock?
它是一个RAII(Resource Acquisition Is Initialization)类,即在构造函数中获取锁,在析构函数中释放锁。这样可以确保在任何情况下都能正确释放锁,避免忘记释放锁导致的死锁等问题。的使用使得我们可以更方便地管理互斥锁的获取和释放,从而避免了手动管理锁带来的错误和麻烦。同时,它还提供了更多的功能,例如手动解锁,使得我们可以更灵活地控制互斥锁的持有时间。是C++标准库提供的一个互斥锁的封装类,它提供了更灵活和安全的互斥锁操作。获取互斥锁,并在函数结束时自动释放锁。
2023-12-25 09:53:22
458
原创 Qt信号和槽的五种连接方式
通常情况下,AutoConnection 是最常用的连接方式,它可以根据对象所在的线程自动选择合适的连接方式。如果信号和槽在同一线程,则槽函数会在事件循环中执行;如果信号和槽在不同线程,则槽函数会在接收对象所在的线程中执行,并且发出信号的线程会被阻塞,直到槽函数执行完成。如果信号和槽在不同线程,则槽函数会在接收对象所在的线程中执行。UniqueConnection:确保信号和槽之间的连接是唯一的,即同一个信号不能连接到同一个槽多次。如果信号和槽在不同线程,则槽函数在发出信号的线程中执行。
2023-11-20 16:31:01
539
原创 Qt中简单的并发方式QtConcurrent::run() 方法
QtConcurrent::run() 方法可以用于在后台线程中执行函数或成员函数。它是 Qt 提供的一种简单的并发执行方式,可以方便地在多个线程中执行耗时的任务,而无需手动管理线程的创建和销毁。需要注意的是,QtConcurrent::run() 方法会自动选择一个合适的线程池来执行任务,并在任务完成后自动销毁线程。在需要执行任务的地方调用 QtConcurrent::run() 方法,传递函数或成员函数的指针作为参数。定义一个函数或成员函数,用于执行需要在后台线程中执行的任务。,用于执行后台任务。
2023-11-20 15:49:29
917
原创 qt中d指针
它主要用于隐藏类的实现细节,提供了一种封装和隔离的方式,以便在不影响公共接口的情况下修改和扩展类的实现。使用d指针的主要目的是将类的私有数据成员和实现细节放在一个单独的类中,通常称为Private类或者d类。使用d指针的好处是可以隐藏类的实现细节,提高了类的封装性和安全性。它还允许在不影响公共接口的情况下修改和扩展类的实现,因为私有数据和实现细节都在Private类中。需要注意的是,在使用d指针时,需要自己管理d指针的内存分配和释放。在构造函数中分配内存,在析构函数中释放内存,以避免内存泄漏。
2023-11-14 16:38:40
473
原创 Qt程序执行编译输出内容解释
总的来说,这段文本是一个关于使用 Qt 和 jom 工具进行项目构建的命令行操作的输出结果。具体的意义和结果需要根据完整的输出内容和上下文来确定。这段文本看起来是一个命令行操作的输出结果,其中包含了一些路径和命令。最后一行的输出被截断了,无法完整显示。根据输出中的部分信息,可能是有关进程或路径的相关内容。是 Qt 的项目构建工具,用于生成 Makefile 文件。是一个用于调试构建的 Makefile 文件。目录,并执行一系列命令。是一个用于并行构建的工具,类似于。文件,如果不存在,则使用。
2023-10-31 17:03:46
485
原创 生产者消费者模型-1
在上述示例中,生产者线程通过互斥锁和条件变量实现了对缓冲区的访问和同步,当缓冲区已满时,生产者线程等待;当缓冲区有空间可用时,生产者线程将数据放入缓冲区,并通知消费者线程可以消费。类似地,消费者线程也通过互斥锁和条件变量实现了对缓冲区的访问和同步,当缓冲区为空时,消费者线程等待;当缓冲区有数据可用时,消费者线程从缓冲区中取出数据,并通知生产者线程可以生产。在该模型中,生产者负责生成数据并将其放入共享的缓冲区,而消费者则负责从缓冲区中取出数据进行处理。缓冲区:用于存储生产者生成的数据,以供消费者使用。
2023-10-30 16:49:12
114
原创 zbus协议-1
总体而言,zbus协议是一种高性能、可靠的分布式消息传递协议,通过消息队列和异步通信实现了系统之间的解耦和异步通信。发送者可以将消息发送到特定的主题,接收者可以订阅感兴趣的主题,以接收相关的消息。基于TCP的通信:zbus协议使用TCP作为底层的通信协议,通过建立TCP连接来进行消息的传递。消息队列:zbus协议基于消息队列的模型,通过将消息发送到队列中,实现了消息的异步传递和解耦。简单易用:zbus协议的设计目标是简单易用,提供了简洁的API和易于理解的消息格式。接收者可以在合适的时间接收和处理消息。
2023-10-30 16:47:10
325
原创 Qt中常见的文件操作
这些是Qt中常用的文件操作类和函数,可以根据具体需求选择适合的类和函数来进行文件操作。请注意,在使用这些类和函数之前,确保已经包含了相应的头文件,并且在.pro文件中添加了正确的模块依赖。QFileInfo类:用于获取文件信息,如文件大小、创建时间、修改时间等。QFile类:用于操作文件,包括创建、打开、读取、写入和关闭文件等操作。QDir类:用于操作目录,包括创建、删除、遍历目录等操作。QDataStream类:用于读写二进制文件。QTextStream类:用于读写文本文件。示例:写入和读取二进制数据。
2023-10-24 15:20:17
344
原创 windows消息机制
然后,消息循环(Message Loop)会从消息队列中取出消息,并将其分发给对应的窗口或控件进行处理。消息循环是一个无限循环,负责处理消息和事件,并将其传递给适当的消息处理函数(消息处理器)进行处理。当消息循环将消息分发给窗口或控件时,会根据消息ID调用相应的消息处理函数进行处理。在Windows消息机制中,消息由消息源发送到消息目标,消息目标可以是窗口、控件或线程。总之,Windows消息机制是一种基于消息传递的通信机制,通过消息和消息处理函数实现应用程序之间的交互和通信。
2023-10-09 17:01:47
214
原创 C++易忽略问题:浮点数比较大小
需要注意的是,由于浮点数的精度问题,直接比较浮点数可能会导致不准确的结果。在比较浮点数时,可以使用一个较小的误差范围(例如1e-6)来处理精度问题。使用上述方法可以判断一个浮点数是否在一个区间内。根据具体的需求和精度要求,选择合适的方法来进行判断。
2023-09-01 15:53:39
1594
原创 Qt使用QPixmap类和QScreen类来实现简单截图功能
在上述示例中,首先通过QGuiApplication::primaryScreen()获取屏幕对象,然后使用grabWindow()函数截取整个屏幕的图像,返回一个QPixmap对象。接着可以使用save()函数将截图保存到文件中。在示例中,我们创建了一个QPushButton按钮,当按钮被点击时,调用captureScreen()函数进行截图操作。需要注意的是,截图操作可能需要一些系统权限,确保程序有足够的权限进行截图操作。另外,截图功能可能在不同的平台上有所差异,需要根据具体的平台进行适配。
2023-07-26 17:54:13
1162
原创 `QImage`类对图像进行操作和处理
格式参数可以是文件扩展名(如"png"、“jpg"等),也可以是MIME类型(如"image/png”、"image/jpeg"等)。质量参数用于指定保存的图像质量,取值范围为0-100,默认为-1,表示使用默认质量。通过使用这些方法,可以对图像进行缩放、翻转、变换、格式转换、填充、保存等操作。可以指定目标宽度和高度,同时可以选择保持纵横比或忽略纵横比。可以指定水平和垂直方向是否进行翻转,默认为垂直方向翻转。:将图像转换为指定的格式。可以指定变换矩阵和变换模式,默认为快速变换。:用指定的颜色填充整个图像。
2023-07-26 16:35:05
771
2020牛客校招面试题库(附答案与解析)C++篇.zip
2021-03-11
软件项目开发文档模板
2020-09-26
MyBatis3学习笔记.pdf
2020-09-01
逻辑教育-Python入门教程.pdf
2020-06-16
pictuerLab1.py
2019-11-18
Linux0.01内核分析与操作系统设计.zip
2019-06-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人