XCode 4.5' tr1/Type traits ' файл не найден
Я использую библиотеку wxwidget и у меня есть следующая проблема:
#if defined(HAVE_TYPE_TRAITS)
#include <type_traits>
#elif defined(HAVE_TR1_TYPE_TRAITS)
#ifdef __VISUALC__
#include <type_traits>
#else
#include <tr1/type_traits>
#endif
#endif
Здесь #include не найден. Я использую компилятор Apple LLVM 4.1. (с диалектом c++11). Если я переключусь на компилятор LLVM GCC 4.2, у меня там нет ошибки, но главная проблема заключается в том, что все включения c++11 не будут работать.
Как я могу либо использовать компилятор GCC, но со стандартом c++11, либо сделать так, чтобы LLVM мог найти его ?
Любая помощь была бы очень признательна.
3 ответа:
Я предполагаю, что у вас есть "стандартная библиотека C++", установленная в " libc++". Если это так, то вы хотите
<type_traits>
, а не<tr1/type_traits>
. libc++ предоставляет библиотеку C++11, в то время как libstdc++ (которая также используется по умолчанию в Xcode 4.5) предоставляет библиотеку C++03 с поддержкой tr1.Если вы хотите, вы можете автоматически определить, с какой библиотекой вы используете:
#include <ciso646> // detect std::lib #ifdef _LIBCPP_VERSION // using libc++ #include <type_traits> #else // using libstdc++ #include <tr1/type_traits> #endif
Или, возможно, в вашем случае:
#include <ciso646> // detect std::lib #ifdef _LIBCPP_VERSION // using libc++ #define HAVE_TYPE_TRAITS #else // using libstdc++ #define HAVE_TR1_TYPE_TRAITS #endif
Это команда, которую я использовал для сборки wxWidgets против libc++ (LLVM C++ Standard Library). Должно работать на Yosemite и позже (по крайней мере, пока Apple не сломает все снова):
mkdir build-cocoa-debug cd build-cocoa-debug ../configure --enable-debug --with-macosx-version-min=10.10 make -j8 #This allows make to use 8 parallel jobs
Немного изменил код выше, чтобы избежать жалоб компилятора:
Вставьте в strvararg следующее.h непосредственно перед #ifdefined (HAVE_TYPE_TRAITS)
#include <ciso646> // detect std::lib #ifdef _LIBCPP_VERSION // using libc++ #ifndef HAVE_TYPE_TRAITS #define HAVE_TYPE_TRAITS 1 #endif #else // using libstdc++ #ifndef HAVE_TR1_TYPE_TRAITS #define HAVE_TR1_TYPE_TRAITS 1 #endif #endif