MSVC版本的二进制兼容性

Visual Studio 2013 及更早版本中的 Microsoft C++ (MSVC) 编译器工具集不保证主版本间的二进制兼容性,无法链接由不同版本工具集生成的对象文件、静态库、动态库和可执行文件,因为ABI、对象格式和运行时库不兼容。 微软在 Visual Studio 2015 及更高版本中改变了这个行为。对于自 Visual Studio 2015 以来的所有版本(该版本号都以 14 开头,如Visual Studio 2015、2017、2019 和 2022工具集的版本分别为 v140、v141、v142 和 v143)由其中任一版本编译器编译的运行时库和应用都具有二进制兼容性。 假设你使用 Visual Studio 2015 生成第三方库,你仍可在 Visual Studio 2017、2019 或 2022 生成的应用程序中使用它们,无需使用匹配工具集重新编译。 同时最新版本的 Microsoft Visual C++ 可再发行程序包(运行时库)也兼容所有老版本,无需为不同版本安装不同的运行时库,统一安装最新版本即可。

C++语言

Vcpkg使用仓库最新代码

在向Vcpkg提交port时,我们会不断地对仓库进行修改和调试。如果采用REF方式指定源码版本,则需要不断地修改REF和SHA512,调试起来比较繁琐,我们可以采用HEAD_REF的方式来简化调试流程。 在portfile.cmake文件中指定HEA...

CMake

CMake按目录层级进行分组

为了提高项目的可维护性,我们通常会将不同用途的代码文件放到不同的文件夹中,如头文件放到include目录,源文件放到src目录,第三方库放到3rd目录等。 当使用CMake生成Visual Studio工程时,我们亦希望在Visual Studio中能看到这样的文件结构。当然,我们可以使用source_group指令进行添加,但当目录和层级很多时,这样添加起来就显得比较繁琐了,本文介绍一种懒人方法。

CMake

做人做事做管理【转载】

大道至简,越是根源和基本的问题,道理实际上越简单。关于如何做人、做事、做管理的书很多,我看得不多,但是我觉得这些书更多是侧重技术和实现细节上的,而很少从人的思想和观念去讲。从实际根本上去说,如何做人做事是世界观的问题,也是一个哲学话题。很多人和我一样,已经到了30的年纪,是需要去思考一下应该如何做人如何做事的,也需要一套简单、有效、完整的体系来指导自己,而这套体系将是让自己安身立命于这个世界的基石。

项目管理

Electron判断程序运行环境

Electron官方未提供判断当前程序运行环境的方法。我认为官方不提供这个方法也是说的过去的,因为Electron扮演的是应用开发框架的角色,而运行环境这些东西本身属于开发者自己的事情,有的开发者喜欢定义“开发、测试、预生产、生成”四个环境,而有的开发者却只定义了一个生产环境,这些都不是框架需要参与的事情。

Electron

Electron启动和禁用调试工具的方法

1. 启用调试工具Electron中打开调试窗口的方法有多种,但前提都需要在创建Browser Window时启用devTools特性,如: 12345678const win = new BrowserWindow({ width: 1080, height: 768, title: "test window", webPreferences: { devTools: true }});

Electron

如何在批处理中执行SQL

示例如下: 123"%~dp0\mysql-5.6.19-win32\bin\mysql.exe" ^ -h127.0.0.1 -P31060 -uroot ^ --execute="update mysql.use...

Windows批处理

由HANDLE返回值不确定性引发的思考

HANDLE类型返回值的不确定性指的是Windows API函数的返回值为HANDLE类型时,有两种表示失败的方式: HANDLE == NULL,如CreateEvent等 HANDLE == INVALID_HANDLE_VALUE,如CreateFile等 其中,NULL的值始终为0,而INVALID_HANDLE_VALUE的值为-1,其在32位和64位程序中分别等于0xFFFFFFFF和0xFFFFFFFFFFFFFFFF。 具体哪些函数失败时返回NULL,哪些返回INVALID_HANDLE_VALUE了?这个需要查阅MSDN文档来确定。

Windows编程
13456723