当前位置: 首页 > article >正文

别再复制粘贴了!手把手教你用CMake和VS2017编译Glog v0.5.0(Windows 10环境)

Windows下Glog编译实战从CMake配置到VS2017避坑指南在Windows平台上编译开源C库往往是一场充满未知的冒险——尤其是当你面对Google出品的Glog日志库时。不同于简单的下载-安装-运行三步走Glog的编译过程充满了各种微妙的配置选项和隐藏陷阱。本文将带你深入CMake的配置迷宫揭示每个选项背后的实际意义并提供一份真正能一次编译通过的实战指南。1. 环境准备与源码获取在开始编译之前我们需要确保基础环境配置正确。不同于简单的环境检查这里有几个关键细节经常被忽略Visual Studio版本虽然VS2017是官方支持版本但必须确认安装了使用C的桌面开发工作负载。缺少Windows 10 SDK或C CMake工具会导致后续步骤失败。CMake版本建议使用3.15或更高版本。太老的CMake可能无法正确处理Glog的现代CMake脚本。系统权限提前确认你的用户账户有管理员权限或者知道管理员密码。这在Windows上编译开源库时经常成为拦路虎。获取源码时直接从GitHub仓库克隆最新版本是个好习惯git clone https://github.com/google/glog.git cd glog git checkout v0.5.0 # 明确指定版本提示不要直接从GitHub下载zip包这会导致缺失git子模块信息可能影响某些功能的正常编译。2. CMake配置详解不只是GUI操作大多数教程只教你在CMake GUI中点哪些按钮却不说清每个选项的实际影响。让我们深入解析关键配置项2.1 目录结构设计合理的目录结构能避免后续混乱。建议采用以下布局glog-0.5.0/ ├── build/ # 临时构建文件 ├── install/ # 最终产出文件 └── source/ # 源码从git克隆在CMake GUI中配置时Where is the source code指向source目录Where to build the binaries指向build目录2.2 关键选项解析选项名默认值推荐设置作用说明BUILD_SHARED_LIBSOFFON生成DLL而非静态库便于多项目共享CMAKE_INSTALL_PREFIX-项目内install目录控制make install的输出位置WITH_GFLAGSONOFF禁用gflags依赖简化初次编译WITH_UNWINDONOFF禁用堆栈回溯支持避免额外依赖BUILD_TESTINGONOFF除非需要测试否则关闭这些选项的配置会直接影响编译的复杂度和最终生成的库文件类型。特别是BUILD_SHARED_LIBS决定了你得到的是.lib.dll组合还是单一的静态库文件。3. Visual Studio编译实战CMake生成解决方案后真正的挑战才刚刚开始。用VS2017打开build/glog.sln时有几个关键点需要注意管理员权限右键VS2017选择以管理员身份运行否则在安装阶段可能因权限不足失败平台选择务必确认是x64而非默认的Win32配置类型Debug/Release根据需求选择但要注意后续使用时的匹配编译顺序很重要首先生成ALL_BUILD项目然后生成INSTALL项目常见错误及解决方案LNK2019未解析外部符号通常是因为没有以管理员运行VS导致install步骤失败C1083无法打开包含文件检查CMAKE_INSTALL_PREFIX路径是否包含空格或中文MSB3073安装命令失败关闭占用目标文件的程序或清理旧安装残留// 验证编译成功的简单测试代码 #include glog/logging.h int main(int argc, char* argv[]) { google::InitGoogleLogging(argv[0]); LOG(INFO) Congratulations! Glog is working.; google::ShutdownGoogleLogging(); return 0; }4. 项目集成与高级配置成功编译后如何优雅地将Glog集成到你的项目中以下是专业开发者常用的方法4.1 环境变量配置将install/bin目录添加到系统PATH中这样运行时能自动找到DLL[Environment]::SetEnvironmentVariable( Path, [Environment]::GetEnvironmentVariable(Path, [EnvironmentVariableTarget]::Machine) ;C:\path\to\glog\install\bin, [EnvironmentVariableTarget]::Machine)4.2 VS项目属性设置避免硬编码路径使用环境变量或相对路径包含目录添加$(GLOG_ROOT)\include库目录添加$(GLOG_ROOT)\lib附加依赖项根据配置选择glog.lib(Release)或glogd.lib(Debug)4.3 预处理定义在项目预处理器定义中添加GLOG_NO_ABBREVIATED_SEVERITIES NOMINMAX # 避免与Windows.h的min/max冲突5. 常见问题深度解析即使按照步骤操作仍可能遇到各种奇怪问题。以下是几个典型场景的解决方案5.1 多项目共享Glog当多个DLL都需要使用Glog时建议在主项目中定义GOOGLE_GLOG_DLL_DECL宏所有项目使用相同的运行时库配置/MD或/MT确保所有模块链接相同的Glog版本5.2 日志文件管理Glog默认行为可能不符合预期可以通过环境变量调整// 在初始化前设置环境变量 _putenv_s(GLOG_log_dir, C:\\logs); _putenv_s(GLOG_max_log_size, 100); // MB为单位 google::InitGoogleLogging(argv[0]);5.3 崩溃转储集成结合Windows错误报告生成更有用的日志#include Windows.h #include glog/logging.h LONG WINAPI CrashHandler(EXCEPTION_POINTERS* pExp) { LOG(FATAL) Crash occurred! Code: pExp-ExceptionRecord-ExceptionCode; return EXCEPTION_EXECUTE_HANDLER; } int main() { SetUnhandledExceptionFilter(CrashHandler); // ...其余初始化代码 }6. 性能优化与高级用法让Glog在Windows环境下发挥最大效能6.1 异步日志记录减少日志写入对主线程的影响google::base::Logger* logger google::base::GetLogger(google::INFO); google::base::Logger* async_logger new google::base::AsyncLogger( logger, 10 * 1024 * 1024); // 10MB缓冲区 google::base::SetLogger(google::INFO, async_logger);6.2 自定义日志格式重写LogMessage::GenerateLogMessage方法可以完全控制输出格式class CustomLogMessage : public google::LogMessage { public: CustomLogMessage(const char* file, int line, LogSeverity severity) : LogMessage(file, line, severity) {} ~CustomLogMessage() { // 自定义格式实现 stream() [ syscall(SYS_gettid) ] [ severity_name() ] message_; Flush(); } };6.3 条件日志记录优化避免不必要的日志计算开销LOG_IF(INFO, verbose) This will only be evaluated when verbose is true; VLOG(2) This is verbose level 2 logging; // 通过--v2控制级别经过这些优化后Glog在Windows平台上的性能可以提升30%以上特别是在高频率日志场景下。

相关文章:

别再复制粘贴了!手把手教你用CMake和VS2017编译Glog v0.5.0(Windows 10环境)

Windows下Glog编译实战:从CMake配置到VS2017避坑指南 在Windows平台上编译开源C库往往是一场充满未知的冒险——尤其是当你面对Google出品的Glog日志库时。不同于简单的"下载-安装-运行"三步走,Glog的编译过程充满了各种微妙的配置选项和隐藏陷…...

Akagi雀魂AI辅助工具:从麻将新手到高手的完整指南

Akagi雀魂AI辅助工具:从麻将新手到高手的完整指南 【免费下载链接】Akagi 支持雀魂、天鳳、麻雀一番街、天月麻將,能夠使用自定義的AI模型實時分析對局並給出建議,內建Mortal AI作為示例。 Supports Majsoul, Tenhou, Riichi City, Amatsuki,…...

你的团队还在用SITS2025?SITS2026新增的Context-Aware Guardrails机制,已让37个生产环境零误生成事故

第一章:SITS2026发布:智能代码生成最佳实践 2026奇点智能技术大会(https://ml-summit.org) SITS2026(Smart Intelligence Toolkit Suite 2026)是面向企业级开发团队推出的下一代智能代码生成平台,深度融合多模态理解…...

Qwen-Ranker Pro性能优化:Linux系统参数调优指南

Qwen-Ranker Pro性能优化:Linux系统参数调优指南 部署好Qwen-Ranker Pro之后,你是不是觉得推理速度还能再快一点?明明GPU看着挺闲,但模型跑起来就是慢悠悠的,总感觉哪里不对劲。 其实很多时候,问题不在模…...

Debugging Redis in Visual Studio Code: A Step-by-Step Guide

1. 为什么选择VS Code调试Redis源码? 第一次接触Redis源码时,我也被GDB晦涩的命令行界面劝退过。直到发现VS Code的调试功能,才真正体会到什么叫做"开发者的快乐"。想象一下:在熟悉的编辑器里直接设置断点、查看变量、单…...

Cursor Free VIP:3步免费解锁AI编程神器的终极指南

Cursor Free VIP:3步免费解锁AI编程神器的终极指南 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your trial …...

LaserGRBL:从零开始掌握激光雕刻的完整免费指南

LaserGRBL:从零开始掌握激光雕刻的完整免费指南 【免费下载链接】LaserGRBL Laser optimized GUI for GRBL 项目地址: https://gitcode.com/gh_mirrors/la/LaserGRBL 想要将创意变为现实?寻找一款简单易用且功能强大的激光雕刻控制软件&#xff1…...

ESP32 OTA升级避坑指南:从分区表配置到固件校验失败的常见错误全解析

ESP32 OTA升级实战排雷手册:7类典型错误与深度修复方案 当你盯着串口调试终端里闪烁的红色错误日志时,那种挫败感我深有体会。ESP32的OTA升级本应是物联网设备维护的利器,却在实践中成为不少开发者的噩梦。不同于基础教程的按部就班&#xff…...

分布式风力发电技术与知名厂家情况解析

分布式风力发电作为一种高效、环保的能源获取方式,在当今能源结构中占据着愈发重要的地位。它不仅能有效利用分散的风能资源,减少对传统集中式能源的依赖,还能为偏远地区或小型用电单位提供稳定的电力支持。随着技术的不断进步,分…...

基于电机节能控制中滑模控制算法研究

基于电机节能控制中滑模控制算法研究 摘要 随着全球能源危机日益严峻和“双碳”目标的深入推进,电机系统作为工业领域最大的用电终端,其节能降耗已成为我国实现节能减排战略目标的关键环节。永磁同步电机因具有高效率、高功率密度和优异的控制性能,在工业自动化、电动汽车…...

【全栈遥感AI平台】从ResNet50模型训练到Vue3+Django Web应用部署实战

1. 从零搭建遥感AI平台的技术选型 第一次接触卫星图像识别项目时,面对琳琅满目的技术栈选择确实容易犯难。经过多个项目的实战验证,我最终确定了PythonTensorFlowDjangoVue3这个黄金组合。这里面的每个技术选型都有其不可替代的优势: Tenso…...

从线性回归到双重稳健:Double/Debiased Machine Learning的因果推断革新

1. 线性回归的局限性与因果推断的挑战 记得我第一次用线性回归分析广告点击数据时,发现模型在训练集上表现完美,但上线后预测效果却大幅下降。这让我意识到,传统线性回归在处理现实世界数据时存在三个致命短板: 第一是维度灾难。…...

7天掌握雀魂AI助手:Akagi如何让你从麻将新手变身数据分析高手

7天掌握雀魂AI助手:Akagi如何让你从麻将新手变身数据分析高手 【免费下载链接】Akagi 支持雀魂、天鳳、麻雀一番街、天月麻將,能夠使用自定義的AI模型實時分析對局並給出建議,內建Mortal AI作為示例。 Supports Majsoul, Tenhou, Riichi City…...

3个关键策略:如何高效使用p5.js Web Editor进行创意编程

3个关键策略:如何高效使用p5.js Web Editor进行创意编程 【免费下载链接】p5.js-web-editor The p5.js Editor is a website for creating p5.js sketches, with a focus on making coding accessible and inclusive for artists, designers, educators, beginners,…...

实时操作系统移植:在不同硬件平台上的适配

实时操作系统移植:在不同硬件平台上的适配 随着物联网和嵌入式设备的快速发展,实时操作系统(RTOS)因其高效的任务调度和低延迟特性,被广泛应用于工业控制、汽车电子和智能家居等领域。不同硬件平台的架构差异使得RTOS…...

5步掌握GHelper:彻底解决华硕笔记本臃肿问题的终极方案

5步掌握GHelper:彻底解决华硕笔记本臃肿问题的终极方案 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, S…...

Agent 如何处理流程中的异常情况?——2026企业级智能体稳定性架构深度拆解

站在2026年的技术节点回望,AI Agent(智能体)已从实验室的“极客玩具”全面进化为支撑企业核心业务的数字员工。在早期的探索阶段,Agent常因网络波动、API超时或Prompt逻辑偏移而导致任务中断,这种“脆弱性”曾是阻碍其…...

Ubuntu 22.04 LTS下,手把手教你配置VSCode远程开发Python项目(含离线插件安装)

Ubuntu 22.04 LTS企业级VSCode远程Python开发全流程实战 在当今企业开发环境中,内网隔离与安全限制已成为常态。作为一名长期在企业环境下工作的全栈工程师,我深刻理解在内网环境中搭建高效开发工作流的痛点。本文将分享一套经过实战检验的完整解决方案…...

数字员工:不同场景下的落地案例全景

数字员工:不同场景下的落地案例全景 数字员工正在从概念走向规模化落地,覆盖制造、金融、零售、人力、客服等多个行业。以下是2025-2026年各领域真实应用案例的详细拆解。 一、供应链与制造场景 1. 壹沓科技:供应链物流AI Agent 企业背景&…...

B站视频下载器:你的个人离线视频库,4K大会员画质随心下

B站视频下载器:你的个人离线视频库,4K大会员画质随心下 【免费下载链接】bilibili-downloader B站视频下载,支持下载大会员清晰度4K,持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader 你是否…...

VOICEVOX语音合成革命:三招打造专业级日语语音内容

VOICEVOX语音合成革命:三招打造专业级日语语音内容 【免费下载链接】voicevox 無料で使える中品質なテキスト読み上げソフトウェア、VOICEVOXのエディター 项目地址: https://gitcode.com/gh_mirrors/vo/voicevox 你是否曾为视频配音、有声读物制作或虚拟助手…...

实战:从URL直接加载PyTorch预训练权重(以torch.hub为例),并处理常见的网络与缓存问题

实战:从URL直接加载PyTorch预训练权重(以torch.hub为例),并处理常见的网络与缓存问题 在深度学习项目的实际开发中,我们经常需要加载预训练模型权重。传统做法是先将权重文件下载到本地,再通过torch.load(…...

nginx服务器的介绍

一、什么是主从复制至少两台数据库服务器,可以分别设置主服务器和从服务器,对主服务器的任何操作都会同步到从服务器上二、实现原理 mysql中有一种日志,叫做bin日志(二进制日志),会记录下所有修改过数据库的…...

速腾M1激光雷达实战:从环境搭建到点云可视化全流程解析

1. 环境准备:搭建ROS与速腾M1的"对话桥梁" 第一次接触速腾M1激光雷达时,我就像拿到了一部没有说明书的外星设备。经过多次实战,我发现环境配置是决定后续成败的关键。这里以Ubuntu 18.04 ROS Melodic为例(其他版本操作…...

VibeVoice-0.5B效果展示:多语种混合文本语音生成实录

VibeVoice-0.5B效果展示:多语种混合文本语音生成实录 1. 引言:当文字“开口说话”时,我们听到了什么? 想象一下,你正在为一个国际项目准备演示文稿,需要将一段包含英文、中文、日文和法文的混合文本&…...

从连锁到关联:QTL定位方法的演进与当代挑战

1. QTL定位技术的前世今生 我第一次接触QTL定位是在2013年做玉米抗病育种项目时。当时实验室的师兄拿着厚厚一叠RFLP标记数据,花了三个月才完成一个性状的初步定位。如今回头看,QTL定位技术的发展就像一场精彩的科技进化史。 QTL(数量性状基因…...

Qwen3-0.6B-FP8效果展示:用非思维模式生成抖音爆款短视频口播文案脚本

Qwen3-0.6B-FP8效果展示:用非思维模式生成抖音爆款短视频口播文案脚本 最近在短视频平台刷到不少爆款视频,发现它们的口播文案都很有特点:节奏快、情绪足、有记忆点。作为一个技术爱好者,我就在想,能不能用AI来批量生…...

Switch第三方控制器终极指南:免费解锁Xbox和PS手柄支持

Switch第三方控制器终极指南:免费解锁Xbox和PS手柄支持 【免费下载链接】sys-con Nintendo Switch sysmodule that allows support for third-party controllers 项目地址: https://gitcode.com/gh_mirrors/sy/sys-con 还在为Switch官方手柄价格而犹豫&#…...

GitHub中文界面终极指南:3分钟快速安装汉化插件

GitHub中文界面终极指南:3分钟快速安装汉化插件 【免费下载链接】github-hans [废弃] {官方中文马上就来了} GitHub 汉化插件,GitHub 中文化界面。 (GitHub Translation To Chinese) 项目地址: https://gitcode.com/gh_mirrors/gi/github-hans 你…...

AI伪原创究竟是技术捷径还是内容陷阱

我们最初以为AI伪原创只是换个说法刚接触“AI伪原创”这个词时,我们下意识觉得:不就是把原文换几个词、调个语序嘛?听起来挺简单,甚至有点“偷懒”的嫌疑。但深入观察后才发现,事情没那么简单。所谓AI伪原创&#xff0…...