Отсутствует заголовок С++ <__ 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".