Mac OSX libc ++缺少std :: uncaught_exceptions符号

时间:2016-08-09 13:22:43

标签: c++ macos libc++ darwin

我注意到我的Mac上的股票libc ++中缺少std :: uncaught_exceptions符号:

$ clang++ -v; otool -L /usr/lib/libc++.dylib
Apple LLVM version 7.3.0 (clang-703.0.31)
Target: x86_64-apple-darwin15.6.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
/usr/lib/libc++.dylib:
    /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.1.0)
    /usr/lib/libc++abi.dylib (compatibility version 1.0.0, current version 125.0.0)
...
$ nm /usr/lib/libc++.dylib | c++filt | grep uncaught
0000000000007782 T std::uncaught_exception()
                 U ___cxa_uncaught_exception

但是,标题声明了原型:

$ pwd
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1
$ grep uncaught_exceptions exception
int  uncaught_exceptions() noexcept;  // C++17
_LIBCPP_FUNC_VIS int uncaught_exceptions() _NOEXCEPT;

这是一个糟糕的构建还是什么?从libc ++源代码我看到符号应该以libc ++结尾,但它不存在,并且在链接时我得到一个缺少的符号。

编辑:这是一个最小的失败程序:

$ cat t.cpp; clang++ -std=c++1z t.cpp
#include <exception>

int main () {
    return std::uncaught_exceptions ();
}
Undefined symbols for architecture x86_64:
  "std::uncaught_exceptions()", referenced from:
      _main in t-a4015f.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

1 个答案:

答案 0 :(得分:1)

已经有一段时间(几年),因为Apple认为重要的是更新libc ++。dylib。我听说传闻可能在 El Capitan之后在操作系统中更新。

Swift 有什么问题?! ; - )