缺少C ++头<__调试>更新OSX命令行工具6.3后缺少C ++头<__调试&g

2019-05-13 05:41发布

从App Store更新到命令行工具6.3后,程序,包括<vector><iterator>在内部包括<__调试>将导致未找到错误如下文件。 CPP的是什么有趣的,但包括在包括头部的一个。

c++ -O3 -I/Users/farleylai/Documents/dev/git/ESMS/Optimizer/../StreamIt/src/cluster/headers -L/Users/farleylai/Documents/dev/git/ESMS/Optimizer/../StreamIt/build/binaries/clusterStaticLibrary /Users/farleylai/Documents/dev/git/ESMS/Optimizer/build/StreamIt/FIR/511/512/combined_threads.cpp -o streamit -lcluster -lpthread -lstdc++
In file included from /Users/farleylai/Documents/dev/git/ESMS/Optimizer/build/StreamIt/FIR/511/512/combined_threads.cpp:9:
In file included from /Users/farleylai/Documents/dev/git/ESMS/Optimizer/../StreamIt/src/cluster/headers/node_server.h:22:
In file included from /Users/farleylai/Documents/dev/git/ESMS/Optimizer/../StreamIt/src/cluster/headers/thread_info.h:20:
In file included from /Users/farleylai/Documents/dev/git/ESMS/Optimizer/../StreamIt/src/cluster/headers/connection_info.h:19:
/Users/farleylai/Documents/dev/git/ESMS/Optimizer/../StreamIt/src/cluster/headers/socket_holder.h:43:25: warning: delete called on 'mysocket' that is abstract but has non-virtual destructor
      [-Wdelete-non-virtual-dtor]
    if (!is_mem_socket) delete sock;
                        ^
In file included from /Users/farleylai/Documents/dev/git/ESMS/Optimizer/build/StreamIt/FIR/511/512/combined_threads.cpp:9:
In file included from /Users/farleylai/Documents/dev/git/ESMS/Optimizer/../StreamIt/src/cluster/headers/node_server.h:22:
In file included from /Users/farleylai/Documents/dev/git/ESMS/Optimizer/../StreamIt/src/cluster/headers/thread_info.h:26:
In file included from /Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/vector:265:
In file included from /Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/__bit_reference:15:
/Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/algorithm:641:10: fatal error: '__debug' file not found
#include <__debug>
         ^

任何想法解决这一问题? 我不希望指定任何额外的C ++的标志。

谢谢。

PS:的MacBook Pro在OSX 10.10.3

更新:

该问题是由苹果公司在其开发者的论坛验证。 在命令行工具6.2,__debug列入有条件把守如下而不是在6.3。

#ifdef _LIBCPP_DEBUG
#   include <__debug>
#else
#   define _LIBCPP_ASSERT(x, m) ((void)0)
#endif

而libcxx人们津津乐道的去除__debug的守卫在这里 。 这感觉就像__debug OSX上从未存在。

Answer 1:

通过降级的命令行工具6.2 苹果的开发者下载页面 。

小心下载了正确版本的OS X:

  • OS X 10.10 commandlinetoolsosx10.10forxcode6.2.dmg
  • OS X 10.9 commandlinetoolsosx10.9forxcode6.2.dmg

这工作,因为列入__debug有条件防护,在命令行工具6.2,但不是在6.3以下。

#ifdef _LIBCPP_DEBUG
#   include <__debug>
#else
#   define _LIBCPP_ASSERT(x, m) ((void)0)
#endif

在我看来,这是最安全的方法,这是因为:

  1. 你不妥协你的工具链
  2. 您可以通过App Store中轻松升级时,苹果修复了问题
  3. 如果添加文件手动你以后删除或可能发生更多的问题

更新- 2015年4月21日

问题被苹果修复 。 安装命令行工具后6.3.1一切正常!



Answer 2:

暂时创建丢失的__debug其中file _LIBCPP_ASSERT被定义为命令行工具6.2 OS X.

echo '#define _LIBCPP_ASSERT(x, m) ((void)0)' | sudo tee -a /Library/Developer/CommandLineTools/usr/include/c++/v1/__debug > /dev/null

删除临时文件编译完成之后。

sudo rm /Library/Developer/CommandLineTools/usr/include/c++/v1/__debug


Answer 3:

警告!!! 这是一个黑客,使用您自己的风险! 这种变通办法仅作为一个临时的解决办法,直到苹果公司提供了一个更新的命令行工具。

OK,我们开始吧:创建自己的文件,并把以下内容到它:

#ifndef _LIBCPP_ASSERT
#define _LIBCPP_ASSERT(...) ((void)0)
#endif

似乎为我工作,但它肯定是不应该做的事情。 确保该文件位于正确的位置/Library/Developer/CommandLineTools/usr/include/c++/v1/__debug与权利人/权限。



Answer 4:

这是现在固定在命令行工具6.3.1,可从https://developer.apple.com/downloads 。 更新应该(虽然它标为6.3,而不是6.3.1)在您的应用程序商店更新将自动显示。 道歉的不便,并非常感谢报告了该问题。

早些时候:这在一个简单的情况下,工作对我来说一种解决方法是设立最低OS X 10.8或更早的版本,以“-mmacosx版本分钟= 10.8”。



Answer 5:

我跟着@Flash谢里登的建议,得到了我的CLT再次合作(GIT,红宝石,BREW ...) - 我用 “命令行工具(OS X 10.10)的Xcode的6.3.1”。



文章来源: Missing C++ header <__debug> after updating OSX Command Line Tools 6.3