基本上,boost文件系统库会在程序运行时引发运行时异常.有了一些调试和谷歌搜索,我已经将违规的呼叫减少到以下最小程序:
#include <locale>int main ( int argc,char *argv [] ) { std::locale::global(std::locale("")); return 0;}
当我通过g运行此程序并在设置了LANG = en_US.UTF-8的环境中执行生成的程序时,该程序失败(当我创建一个新的控制台窗口时,我的计算机是默认bash会话的一部分).清除环境变量(setenv LANG =)允许程序运行没有问题.但我很惊讶,我在默认配置中看到这种破坏.
我的问题是:
>这是MacOS 10.6上此代码的预期行为吗?
>什么是正确的解决方法?我不能真正重写函数,因为我们使用的boost库的版本在内部执行该语句作为文件系统库的一部分.
为了完整起见,我应该指出,当通过“打开”命令(或从Finder)启动时,代码被合成的程序崩溃,但是当Xcode在调试模式下运行程序时,不会.
编辑10.6.1上面的代码给出的错误是:
$./locale terminate called after throwing an instance of 'std::runtime_error' what(): locale::facet::_S_create_c_locale name not valIDAbort trap解决方法 最近我在Ubuntu 14.04 LTS和RaspBerry Pi上运行最新的Raspbian Wheezy遇到了这个问题.
它与OS X无关,而是与G和Boost的组合(至少高达V1.55)和某些平台上的默认语言环境设置.有一些与此问题相关的Boost BUG门票,请参阅
ticket #4688和ticket #5928.
我的“解决方案”首先要做一些额外的区域设置,如this AskUbuntu posting所示:
sudo locale-gen en_US en_US.UTF-8sudo dpkg-reconfigure locales
但是,我也必须确保环境变量LC_ALL设置为LANG的值(建议将其放在.profile中):
export LC_ALL=$LANG
在我的情况下,我使用locale en_US.UTF-8.
最后说:OP表示“当我通过g运行这个程序失败”.我明白这个线程是在2009年开始的,但是今天绝对没有必要在Mac上使用GCC或G,所以可以从Apple免费获得更好的LLVM / Clang编译器套件,请参阅XCode home page.
总结以上是内存溢出为你收集整理的MacOS 10.6上的c – std :: locale破解,LANG = en_US.UTF-8全部内容,希望文章能够帮你解决MacOS 10.6上的c – std :: locale破解,LANG = en_US.UTF-8所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)