2012-11-04 26 views
5

utilizzare la libreria wxWidget e ho il seguente problema:XCode 4.5 'TR1/type_traits' file not found

#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 

qui il # include non viene trovato. Io uso il compilatore Apple LLVM 4.1. (con il dialetto C++ 11). Se passo al compilatore GV 4.2 LLVM non ho alcun errore lì, ma il problema principale è che tutte le inclusioni di C++ 11 non funzioneranno.

Come posso utilizzare il compilatore GCC, ma con lo standard C++ 11 o far sì che LLVM possa trovare il?

qualsiasi aiuto sarebbe davvero apprezzato.

risposta

12

Suppongo che la "Libreria standard C++" sia impostata su "libC++". Se questo è il caso, si desidera <type_traits>, non <tr1/type_traits>. libC++ fornisce una libreria C++ 11, mentre libstdC++ (che è anche l'impostazione predefinita in Xcode 4.5) offre una libreria C++ 03 con supporto tr1.

Se si desidera, è possibile rilevare automaticamente quale libreria si sta utilizzando con:

#include <ciso646> // detect std::lib 
#ifdef _LIBCPP_VERSION 
// using libc++ 
#include <type_traits> 
#else 
// using libstdc++ 
#include <tr1/type_traits> 
#endif 

O nel tuo caso, forse:

#include <ciso646> // detect std::lib 
#ifdef _LIBCPP_VERSION 
// using libc++ 
#define HAVE_TYPE_TRAITS 
#else 
// using libstdc++ 
#define HAVE_TR1_TYPE_TRAITS 
#endif 
+0

Grazie, questo risolto il problema – Aranir

+0

Grazie - ha avuto lo stesso problema e cambiando alla libreria GNU risolto per me :-) –

0

leggermente modificato il codice di cui sopra, al fine di evitare compilatore lamentele:

incollare il seguente in strvararg.h appena prima #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 
0

Questo è il comando che ho usato per creare wxWidgets contro libC++ (libreria standard LLVM C++). Dovrebbe funzionare su Yosemite e più tardi (almeno fino a quando Apple si rompe di nuovo tutto):

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