- 博客(80)
- 收藏
- 关注
原创 2.6 MSYS2 简单使用
MSYS2是一款Windows下的开发工具链,提供原生Windows应用编译环境与类Unix开发体验。集成了MinGW-w64工具链支持32/64位应用开发,包含Pacman包管理系统(3300+预编译包)和多个子系统(MSYS2、MINGW32/64、UCRT64、CLANG64)。安装后可通过更换国内镜像源加速,常用Pacman命令包括软件安装(-S)、系统升级(-Syu)、清理缓存(-Sc)等。需手动安装MinGW64工具链(mingw-w64-x86_64-toolchain)和基础开发工具(bas
2025-06-11 11:12:05
602
原创 4.2 C/C++开发环境:VSCode+CMake+MSYS2
本文介绍了如何在VSCode中使用PowerShell终端配置MSYS2环境并构建CMake项目。主要内容包括:1) 通过init_project.ps1初始化项目目录结构;2) 使用set_env.ps1脚本配置MSYS2环境变量,使其能在PowerShell中使用;3) 提供手动和自动两种编译方式(通过build.ps1脚本)。文中重点说明了MSYS2的路径配置、子系统选择和环境变量继承设置,并给出了CMake项目的基本配置示例。该方案适用于未设置环境变量的MSYS2解压安装情况。
2025-06-10 00:55:02
382
原创 4.1 C/C++开发环境:VSCode+CMake+VS2017
本文介绍了如何在VSCode中使用CMake插件配置VS编译器并构建C++项目。首先详细说明了软件安装步骤,包括VS、VSCode和CMake的下载与配置。然后通过示例项目演示了从创建项目文件到编译的全过程,重点讲解了CMakeLists.txt的编写和VS编译器的选择配置。最后提供了两种构建方式:直接使用预设配置或重新生成配置后进行构建。文中还解释了CMake关键参数的含义,为开发者提供了从环境搭建到项目构建的完整指导。
2025-06-09 17:47:24
861
原创 3.2 判断.lib和.a是静态库 还是动态库的导入库
摘要: 区分静态库(.lib)与动态库导入库可通过三种方法:1) lib.exe工具(VS自带):静态库输出.obj文件列表,导入库显示.dll文件名;2) 文件解压(如7-Zip):静态库含大量.obj文件,导入库仅含符号表或.dll引用;3) 环境观察:静态库文件较大且独立,导入库较小且需配套.dll。推荐优先使用lib.exe官方工具验证。
2025-06-09 16:47:03
228
原创 3.1 查看动态库或程序的依赖库
本文介绍了分析软件依赖库的原理和工具。Windows通过PE文件导入表记录DLL依赖,Linux则通过ELF文件的.dynamic段记录.so依赖。推荐Windows使用Dependencies工具可视化分析依赖树,或dumpbin快速列出依赖;Linux常用ldd查看运行时依赖,objdump安全解析ELF结构。文章还对比了进程级分析工具如Process Explorer和pmap。最后总结强调:Windows依赖问题宜使用Dependencies调试,Linux推荐ldd结合objdump验证,缺失库需
2025-06-09 15:33:41
860
原创 2.5 MinGW简单使用
MinGW是一个Windows平台的轻量级GNU开发工具集,允许使用GCC编译器构建原生Windows应用。主要组件包括GCC编译器、Binutils工具链、MinGW运行时库等,支持32/64位架构,提供POSIX/win32线程模型和不同异常处理机制。MSYS2则提供一个类Unix开发环境,集成MinGW-w64工具链和Unix工具,支持原生Windows应用开发。安装时需注意选择适合的架构、线程模型等参数。MinGW编译方式与Linux下gcc类似,可编译程序和库。MSYS2建议不加入环境变量以避免冲
2025-06-09 13:41:49
815
原创 2.4 vcpkg 使用
Vcpkg包管理工具使用指南 本文介绍了Vcpkg C/C++包管理工具的基本使用和进阶操作。主要内容包括: 安装配置:通过PowerShell安装Vcpkg,设置代理环境变量,编译生成vcpkg.exe 基本命令:搜索、安装、列出、导出和卸载库文件的操作方法 进阶使用: 安装指定类型的库文件(动态/静态库、Debug/Release版本) 导出版本库的多种格式(7z、zip、raw等) 通过vcpkg.json文件管理特定版本库的安装 该指南提供了详细的命令行示例和配置说明,适合开发人员快速上手Vcpkg
2025-06-07 17:20:37
936
原创 2.3 VS2019 简单使用
本文介绍了VS2019开发环境的使用指南,包括项目结构解析、常用快捷键、添加源文件和第三方库的方法。重点讲解了静态库和动态库的编译过程,涉及项目类型修改、导出函数配置等关键步骤。还提供了VS与CMake结合的实践指导,列出不同VS版本的CMake生成器名称和架构选项,并给出指定生成器的命令行示例。全文通过图文并茂的方式,为开发者提供了清晰的操作指引,涵盖从基础配置到高级编译的实用技巧。
2025-06-07 10:45:12
583
原创 2.2 MSVC 简单使用
MSVC工具链是VS2019的核心开发组件,包含编译器(cl.exe)、链接器(link.exe)、调试工具和包管理等功能。通过命令行可编译C程序,先由cl.exe生成.obj文件,再用link.exe链接为.exe或.dll。静态库通过lib.exe打包.obj文件,动态库则需指定导出函数或使用DEF文件。MSVC支持多种C运行时库选项(/MT静态、/MD动态),不同的库命名规范需注意区分静态库和动态库导入库。整个编译流程与Linux的gcc类似,但Windows使用COFF/PE文件格式和"/
2025-06-07 00:50:28
796
原创 2.1 Windows编译环境介绍
Windows平台四大编译工具对比:MSVC是原生Windows编译套件;Cygwin通过cygwin1.dll模拟POSIX层,适合移植Linux软件;MinGW提供GCC移植但不依赖POSIX层;MSYS2结合MinGW和Cygwin优势。它们都能生成Windows程序,但Cygwin支持更多Linux特性。注意不同工具间的ABI兼容性问题,避免混用编译器导致链接错误。其中MinGW和MSVC生成原生Windows程序,Cygwin依赖模拟层,MSYS2则兼具两者特点。
2025-06-06 21:03:59
343
原创 1.4 编译库:静态库、动态库
本文介绍了Linux下静态库和动态库的编译、封装与使用方法。主要内容包括:静态库的编译流程(将.o文件打包成.a文件)、封装静态库(解压后重新打包);动态库的编译(生成位置无关代码)、显式调用(避免符号冲突)、以及将静态库封装为动态库的方法。此外,还讲解了如何混合使用静态库和动态库(通过-Wl参数指定链接方式),并强调了避免同一库同时静态和动态链接以防止冲突。文章提供了详细的命令行操作示例和注意事项,适合Linux开发者参考学习库的管理与使用。
2025-06-06 20:52:53
803
原创 1.3 编译程序:单个C文件和多个C文件
本文介绍了C程序的编译过程,分为单个文件和多文件两种情况。在单个文件编译中,演示了从hello.c源文件到可执行文件的完整过程,包括编译阶段(生成目标文件.o)和链接阶段(生成可执行文件)。重点说明了gcc命令参数的含义和目标文件的特点。在多文件编译案例中,展示了如何处理包含多个相互调用模块的程序,强调编译器在编译阶段不需要知道依赖函数的具体实现,只需在链接阶段将所有对象文件合并成最终可执行程序。文章通过具体命令和示意图,清晰地呈现了C程序的编译链接流程。
2025-06-06 17:25:17
436
原创 1.2 编译基础知识
I<路径>:指定头文件搜索的目录,优先级高于系统默认路径-isystem <路径>:指定系统头文件路径,优先级低于 -I 但高于标准路径环境变量:某些编译器会参考环境变量CPATH或(C 程序)或(C++ 程序)来查找头文件。-L<路径>:在链接时指定库文件的路径,优先级高于系统默认路径环境变量:链接器会参考环境变量指定的路径。使用-l<库名>指定要链接的库,链接器会自动在搜索路径中查找lib<库名>.a或lib<库名>.so-lm表示链接libm.so或libm.a(数学库)。
2025-06-06 16:10:36
389
原创 查看Ubuntu版本
或(清晰且完整)。• 其他命令提供辅助信息(如内核版本、主机名等)。• 对于 LTS 版本,输出中会标注LTS(长期支持版本)。
2025-05-05 23:03:06
337
原创 C++智能指针unique_ptr
unique_ptr是现代 C++ 中管理动态内存的利器,它通过独占所有权和自动释放机制,简化了资源管理,同时保持高效和安全。无论是实现工厂模式、管理容器中的对象,还是处理动态数组,unique_ptr都能胜任。掌握它的核心操作(如releaseresetswap)和注意事项(如std::move的使用),能让您在编写代码时更加得心应手。
2025-03-08 10:09:24
1235
原创 C++智能指针weak_ptr
weak_ptr是一种“弱引用”智能指针,它不会增加所管理对象的引用计数。它的主要作用是用来观察或访问由shared_ptr管理的资源,而不拥有该资源的所有权。由于不拥有所有权,weak_ptr指向的对象可能在某些情况下已经被销毁,因此在使用时需要特别小心。用途weak_ptr主要用于观察资源或打破shared_ptr的循环引用。关键方法lock()获取shared_ptrexpired()检查有效性。典型场景:对象间存在潜在循环引用(如链表、树结构)时。
2025-03-07 18:58:05
1272
原创 C++智能指针shared_ptr
shared_ptr是C++标准库(<memory>头文件)中的一种智能指针,用于管理动态分配的内存。它通过引用计数机制,跟踪有多少个shared_ptr实例共享同一块内存。当最后一个shared_ptr被销毁或重置时,引用计数变为0,内存自动释放。这种“共享所有权”的特性使其非常适合多人共用资源的场景。优先使用:效率高且异常安全。避免重复使用裸指针:通过复制创建新实例。处理this时使用:确保计数一致。防范循环引用:结合weak_ptr使用。shared_ptr。
2025-03-06 20:22:14
1159
原创 RAII编程手法
RAII的核心思想是将资源的获取与对象的构造绑定,将资源的释放与对象的析构绑定,从而确保资源在使用完毕后能够被正确释放,即使发生异常也能保证资源不被遗漏。以下是对RAII的详细介绍:RAII的核心理念是:资源的生命周期与对象的生命周期绑定。
2025-03-06 16:55:36
653
原创 Git分支管理
指定分支git clone -b 分支名 仓库地址例:比如拉取nacos 指定1.1.4git clone -b 1.1.4 https://github.com/alibaba/nacos.git
2021-04-03 10:44:31
352
原创 Git设置终端代理
设置代理git config --global http.proxy http://127.0.0.1:1087git config --global https.proxy https://127.0.0.1:1087取消代理git config --global --unset http.proxygit config --global --unset https.proxy
2021-04-03 10:41:08
599
转载 Notepad++找回缓存的内容
场景:在使用Notepad++的时候,有一个非常方便的自动保存功能,也就是你在新建一个文档后,输入你的内容,在你没有手动保存前,Notepad++会帮你保存当前内容。当你没有保存就退出Notepad++,下次进来Notepad++会自动把你上次编辑的内容显示出来,以便你继续编辑。除非你手动关掉当前页面,这样Notepad++就会删除掉自动保存的内容。(低版本的Notepad++可能没有这个功能...
2020-04-15 00:06:40
770
1
原创 导出MySQL表结构到Excel(含备注)
一、查询表结构SELECT COLUMN_NAME 列名, COLUMN_TYPE 数据类型, DATA_TYPE 字段类型, CHARACTER_MAXIMUM_LENGTH 长度, IS_NULLABLE 是否为空, COLUMN_DEFAULT 默认值, COLUMN_COMMENT 备注 FROM INFORMATION_SCHEMA.COLUMNS...
2020-04-11 21:28:09
2329
1
原创 Java通过时间戳判断是否过期
通过时间戳判断是否过期:时间戳戳是1971年1月1日到现在经过的秒数可以将时间戳转换为字符串保存中数据库中,再转换为long判断。long generateTime = Long.valueOf(new Date().getTime()/1000);long currentTime = Long.valueOf(new Date().getTime()/1000);boolean val...
2020-02-28 16:37:39
2969
1
转载 Windows中杀死占用某个端口的进程
原文链接:https://blog.csdn.net/violet_echo_0908/article/details/50129679 最近写项目,总是出现端口被占用的问题,原来傻傻的把电脑重启一下,终于有一天受不了了,想要想办法解决。刚开始从网上找了好多教程,发现不行。开始自己尝试,终于,成功的将占用端口的进程杀掉。在此记录下过程(以8080端口为例):第一步,打开cmd命令窗口,输入命令...
2019-12-15 11:37:57
818
原创 scp 命令的使用
scp 命令的使用scp传输文件消耗资源比较少,不会提高多少系统的负荷,在小文件比较多的情况下,使用rsync进行复制文件会导致硬盘I/O非常高,而使用scp则基本不影响系统的正常使用。命令格式:scp [-参数] [要传输的文件路径] [SSH链接信息:存放文件的路径]常用参数:-B 使用批处理模式(传输过程中不询问传输口令或短语)-C 允许压缩。(将 - C 标志传递给 s...
2019-08-14 16:59:44
450
原创 知网caj转PDF
解决方法第一种方法http://app.xunjiepdf.com/caj2pdf这个网站可以提供在线caj转pdf的功能,但是如果不用vip只能转2MB以下的文件。较为不方便,如果文档超过2M可以先将文档分章下载,再批量转换,转换之后可以使用金山的批量合并word小工具将这些文档合并。第二种方法在海外版知网上大部分文章都有pdf版本(来源于https://github.com/Jez...
2019-07-06 10:08:54
6046
转载 详述 IntelliJ IDEA 中自动生成 serialVersionUID 的方法
原文:详述 IntelliJ IDEA 中自动生成 serialVersionUID 的方法 当我们用 IntelliJ IDEA 编写类并实现 Serializable(序列化)接口的时候,可能会遇到这样一个问题,那就是:无法自动生成serialVersionUID.而s...
2019-07-03 17:11:06
168
转载 Java构造方法的相互调用
原文:https://blog.csdn.net/lin353809836/article/details/70237477/ 在Java中,当给一个类创建了多个构造方法时,有时想在一个构造方法中调用另一个构造方法以减少代码量。这时可以使用this关键字来实现。 通常,当使用this关键字时,它意味着“这个对象”或者“当前对象”,并且它自身产生对当前对象的引用。在一个构造方法中,当给传递给它...
2019-06-09 10:59:55
1534
原创 13.注解
一、概述 注解(Annotation)其实是代码里的特殊标记 ,这些标记可以在编译、类加载河运行时被读取,并执行响应的处理,在JavaSE中,注解的使用目的比较简单,例如标记过时的功能,忽略警告等,在JavaEE中注解占据了更重要的角色,例如用例配置应用程序的任何切面,代替XML的配置。二、JDK内置的基本注解(3个)@Override:限定重写父类方法,改注解只能用于方法@Depr...
2019-06-04 17:39:45
159
原创 12.枚举类
概述枚举类:一个类中的对象是有限的、可数多个的。如果枚举类的对象只有一个,可以看做单例模式实现方式枚举类主要知识点:如何定义枚举类?1.自定义枚举类...
2019-06-04 13:49:13
175
原创 11.Java异常
概述错误ErrorError是Java虚拟机无法解决的严重问题,如:JVM系统内部错误,资源耗尽等严重情况。比如:StackOverflowError和OOM(OutOfMemoryError)。一般不编写针对性的代码进行处理。例:异常1.异常分类编译时异常:编译时就不通过,报出来的异常。运行时异常(RuntimeException):编译通过,运行时不通过,报出来的异常。...
2019-06-04 08:33:05
145
原创 7.包装类
1.包装类将基本数据类型封装成一个类,让其具有类的属性。2.包装类的基本构成(以Integer为例):private final int value; #定义最终的一个包装类对应的基本数据类型#构造器public Integer(int value) { this.value = value;#int类型直赋值}public Integer(String s) thro...
2019-06-03 23:54:43
144
原创 Eclipse设置UTF-8编码
我的机器默认编码是GBK,在本机上中文显示正常,但换到其他的机器就显示乱码,为了解决这个问题,统一使用UTF-8编码。修改workspace编码windows-&gt;preferences-&gt;gengral-&gt;workspace在下面编码选择other-&gt;UTF-8应用。修改Content Types编码windows-&gt;preferences-&gt;gen..
2019-06-03 23:32:48
39843
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人