使用MSVC2015 64位编译Boost库时遇C2039错误:std无time_t成员
解决Windows10 64位+MSVC2015+QT Creator编译Boost时c_time.hpp的报错问题
我之前在类似环境里踩过同样的坑,结合你的配置(Win10 x64、MSVC2015 x64、QT Creator开启C++14),这个报错的核心原因是MSVC2015默认禁用了std::localtime这类传统非安全函数,而Boost的c_time.hpp代码直接调用了该函数,导致编译冲突。下面是具体的解决步骤:
1. 通过宏定义解除MSVC的安全限制
在你的QT项目.pro文件中添加以下宏定义,告诉编译器不要因为使用非安全标准库函数而报错:
DEFINES += _CRT_SECURE_NO_WARNINGS _CRT_NONSTDC_NO_WARNINGS
添加后重新执行qmake并编译,大部分情况下这个步骤就能直接解决std::localtime的报错问题。
2. 确认Boost版本适配MSVC2015
如果上面的方法无效,检查你的Boost版本:Boost 1.60及以上版本对MSVC2015的64位环境支持更完善。如果你的Boost版本低于这个版本,建议升级到合适的稳定版本(比如1.65.1或1.70.0,这些版本对旧MSVC兼容性较好)。
3. 检查QT Creator的编译环境配置
确保你在QT Creator中选择的是MSVC2015 64位的编译套件:
- 打开「工具」→「选项」→「构建和运行」→「编译器」
- 确认选中的MSVC编译器路径指向x64版本(比如
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64\cl.exe) - 同时检查构建套件(Kit)是否关联了正确的x64编译器和调试器
4. 手动编译Boost时指定正确参数(如果自行编译Boost)
如果你是手动编译Boost库,务必针对MSVC2015 x64环境编译,命令如下:
# 初始化MSVC编译环境 bootstrap.bat vc14 # 编译x64版本的Boost b2 toolset=msvc-14.0 address-model=64 --build-type=complete stage
这样生成的Boost库会完美适配你的编译环境,避免因架构或工具集不匹配导致的问题。
内容的提问来源于stack exchange,提问作者MooMoo
相关产品推荐
相关产品推荐

