Отсутствует заголовок С++ <__ debug> после обновления команд командной строки OSX 6.3

После обновления с помощью средств командной строки 6.3 из магазина приложений программы, включая <vector> или <iterator>, которые внутри включают < __ debug > , будут вызывать ошибку файла, не найденную следующим образом. 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>
         ^

Любые идеи, чтобы исправить это? Я не ожидаю указать какие-либо дополнительные флаги С++.

Спасибо.

PS: MacBook pro на OSX 10.10.3

Обновление:

Проблема проверена Apple на форуме разработчиков. В Инструментах командной строки 6.2 включение __debug условно охраняется следующим образом, но не в 6.3.

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

И люди libcxx говорили об удалении охранников __debug здесь. Похоже, что __debug никогда не существует на OSX.

Ответ 1

Снизьте инструменты командной строки до 6.2 через страницу загрузки приложений для разработчиков.

Будьте внимательны, чтобы загрузить правильную версию для вашей ОС X:

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

Это работает, потому что включение __debug условно охраняется, как указано в Command Line Tools 6.2, но не в 6.3.

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

По-моему, это самый безопасный способ, потому что:

  • Вы не компрометируете свою инструментальную цепочку.
  • Вы можете легко обновить приложение через App Store, когда Apple решит проблему.
  • Если вы добавляете файл вручную, его нужно удалить позже или больше.

Обновление - 21.04.2015

Проблема исправлена ​​Apple/Apple. После установки средств командной строки 6.3.1 все работает так, как ожидалось!

Ответ 2

Временно создайте отсутствующий файл __debug, где _LIBCPP_ASSERT определяется как в Command Line Tools 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

Ответ 3

Внимание!!! Это взломать, использовать на свой страх и риск!!! Эта работа предназначена только для временного исправления, пока Apple не сообщит об обновлении инструментов командной строки.

ОК, здесь мы идем: создайте файл самостоятельно и вставьте в него следующий контент:

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

Это, похоже, работает для меня, но, конечно, это не так. Убедитесь, что файл находится в нужном месте /Library/Developer/CommandLineTools/usr/include/c++/v1/__debug с правильным владельцем/разрешениями.

Ответ 4

Теперь это исправлено в Command Line Tools 6.3.1, доступном из https://developer.apple.com/downloads. Обновление должно появиться автоматически в ваших обновлениях в App Store (хотя его обозначено как 6.3, а не 6.3.1). Извинения за неудобства и большое спасибо за сообщение о проблеме.

Раньше: обходной путь, который работал у меня в простом случае, заключался в установке как минимум OS X 10.8 или более ранней версии с "-mmacosx-version-min = 10.8".

Ответ 5

Я следил за советом @Flash Sheridan и снова заработал мой CLT (git, ruby, brew...). Я использовал "Инструменты командной строки (OS X 10.10) для Xcode 6.3.1".