Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在OS X上设置区域设置崩溃_C++_Macos_Locale_Xlocale - Fatal编程技术网

C++ 在OS X上设置区域设置崩溃

C++ 在OS X上设置区域设置崩溃,c++,macos,locale,xlocale,C++,Macos,Locale,Xlocale,以下代码在Linux上运行良好,但在OS X 10.7上引发异常: #include <iostream> #include <locale> #include <stdexcept> int main() try { std::locale::global(std::locale("")); std::cout << "Using locale: " << std::locale().name() <<

以下代码在Linux上运行良好,但在OS X 10.7上引发异常:

#include <iostream>
#include <locale>
#include <stdexcept>

int main() try {
    std::locale::global(std::locale(""));
    std::cout << "Using locale: " << std::locale().name() << "\n";
}
catch (std::runtime_error const& e) {
    std::cout << e.what() << "\n";
    return 1;
}
#包括
#包括
#包括
int main()尝试{
std::locale::global(std::locale(“”);

std::cout我认为您没有使用xlocale。我认为您的问题在于libstdc++,它使用的是另一个在OS X上不受支持的语言环境支持库,因为问题EitanT链接到状态


如果你切换到libc++你的程序会运行。

上面的海报是正确的…问题在于libstdc++。我想添加我的答案,因为如何让OS X链接到libc++并不简单,我花了一个多小时才弄清楚

通过
g++-libstd=libc++
或通过
clang++-libstd=libc++
或通过别名
c++-libstd=libc++
调用编译器/链接器都将失败

从命令行编译简单程序而不是增加Xcode开销的解决方案是允许Xcode使用命令
xcrun clang++-stdlib=libc++


xcrun
允许Xcode管理工具链,并将在
cout.imbue(locale(foo))
成功运行的地方构建一个成功的可执行文件。

我认为这(几乎)是…@EitanT Good find,它是(一个精确的副本)!谢谢。我认为您没有使用xlocale。我相信您的问题在于libstdc++,它使用不同的区域设置支持库(OS X上显然不支持,因为问题EitanT链接到状态)。我想如果你切换到libc++你的程序会工作的。虽然我的问题详细说明了,libc++中的某些区域设置存在问题,因为xlocale中存在漏洞。@bames53太棒了,介意在回答中写下这一点吗?然后我可以投票并接受。你是对的,这有它自己的问题(打印时的区域设置名称为空)但至少现在它在某些输入上实际使用时似乎使用了UTF-8。实际上,在执行以下操作时,您可以使用libc++与
clang++
配合使用:
export-CXX=“clang++-$cxver-stdlib=libc++”
export-cxflags=“-nostinc++-issystem/usr/local/lib/llvm-$cxver/include/c++/v1”
(适用于适当的
$cxxver
)。我不会在流程的任何部分依赖Xcode–特别是在您通过自制安装了较新版本的Clang之后。Konrad,我感谢您的帮助,但您能否帮助一位新手,并进一步解释一下这些命令的作用?
export
命令在您的终端中设置环境变量。它们有点不重要现在,这些变量的选项集是“代码> -NoSTDIMC++<代码>,它禁用默认的标准库实现。<代码> -LBC++< /COD>告诉CLAN使用LBC++代替默认(LIbSTDC++),而系统…< /Cord>告诉CLANN在哪里找到它。