You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MSYS2 UCRT64环境下Boost.Locale返回Locale Name: *问题求助

MSYS2 UCRT64环境下Boost.Locale无法生成有效区域设置问题

在Windows机器的MSYS2 UCRT64环境中使用Boost.Locale时,尽管已安装完整Boost库,且系统中存在en_US、en_US.utf8等可用区域设置,但调用Boost.Locale生成区域设置时始终返回Locale Name: *。代码可正常编译为.exe文件,无任何警告或错误。

问题代码片段

#include <boost/locale.hpp>
#include <iostream>

int main() {
    try {
        boost::locale::generator gen;
        std::locale loc = gen("en_US.utf8");  // 也试过gen("en_US")
        std::cout << "Locale Name: " << loc.name() << std::endl;
    } catch (const std::exception& e) {
        std::cerr << "Error creating locale: " << e.what() << std::endl;
    }
    return 0;
}

Makefile相关配置

# Compiler settings
CXX := g++
CPPFLAGS := -Iinclude -IC:/msys64/ucrt64/include
CXXFLAGS := -g -O0 -Wall -std=c++20 -mtune=generic -Wextra -pedantic -Wshadow -Wredundant-decls -Wsign-compare
LDFLAGS := -Llib -LC:/msys64/ucrt64/lib
LDLIBS := -lm -lboost_locale-mt -lboost_regex-mt -licudt -licuuc

额外上下文

  • MSYS2区域设置检查:执行locale -a命令显示en_US和en_US.utf8为可用区域设置。
  • 系统区域设置:在CMD中执行systeminfo | find "System Locale"显示en-us;English (United States)。
  • 环境变量:已将LANG和LC_ALL设置为en_US.utf8,但问题未解决。
  • Boost安装:已在MSYS2的ucrt64环境中安装完整Boost库(含Boost.Locale),使用命令:pacman -S mingw-w64-ucrt-x86_64-icu、pacman -S mingw-w64-ucrt-x86_64-boost。

已尝试的操作

  • 尝试生成不同区域设置,包括C、en_US.UTF-8、en_US和en-us。
  • 尝试在MSYS2 UCRT64 Shell和常规CMD中编译运行项目。
  • 检查是否有错误或异常抛出,未捕获到任何异常,但输出始终为Locale Name: *。

内容的提问来源于stack exchange,提问作者daniel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 11:21:17