std::runtime_error: locale::facet::_S_create_c_locale name not valid
在一台配置为
SUSE 11 X86_64 GCC 4.5.0的机器上 静态编译各种库文件 能正常运行
后将其拷贝到另一台配置为:
SUSE 10.1 GCC4.1.0的机器上无法运行,报标题中的这个错误。
google后发现还比较常见,boost maillist中给出了1.52的相关的补丁,地址如下:
https://svn.boost.org/trac/boost/ticket/4688#no1
借此学习一下国际化和本地化的知识,这个链接里有比较详细的介绍:
http://www.ibm.com/developerworks/cn/linux/l-cn-linuxglb/
获取系统当前locale变量
$ locale LANG=en_US.UTF-8 # 未设置任何 LC_xxx 变量时所使用的默认值 LC_CTYPE=zh_CN.UTF-8 # 指定使用某区域的字符分类及处理方式 LC_NUMERIC="en_US.UTF-8" # 指定使用某区域的非货币的数字格式 LC_TIME="en_US.UTF-8" # 指定使用某区域的日期和时间格式 LC_COLLATE="en_US.UTF-8" # 指定使用某区域的排序规则 LC_MONETARY="en_US.UTF-8" # 指定使用某区域的货币格式 LC_MESSAGES="en_US.UTF-8" # 指定使用某区域的响应与信息的格式 LC_PAPER="en_US.UTF-8" # 指定使用某区域的纸张大小 LC_NAME="en_US.UTF-8" # 指定使用某区域的姓名书写方式 LC_ADDRESS="en_US.UTF-8" # 指定使用某区域的地址格式和位置信息 LC_TELEPHONE="en_US.UTF-8" # 指定使用某区域的电话号码格式 LC_MEASUREMENT="en_US.UTF-8" # 指定使用某区域的度量衡规则 LC_IDENTIFICATION="en_US.UTF-8" # 对 locale 自身信息的概述 LC_ALL= # 用来覆盖掉所有其他 LC_xxx 变量的值
locale相关变量使用时的先后顺序,优先级高的可以覆盖优先级低的
[1] LANGUAGE [2] LC_ALL [3] LC_xxx [4] LANG
locale 的名称存在一个命名的格式。
language[_territory[.codeset]][@modifier]
例如:zh_CN.utf-8