2012-11-04 54 views
5

我使用wxwidget庫,我有以下問題:的XCode 4.5 'TR1/type_traits' 找不到文件

#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能夠找到?

任何幫助將非常感激。

回答

12

我猜你已將「C++標準庫」設置爲「libC++」。如果是這種情況,您需要<type_traits>,而不是<tr1/type_traits>。 libC++爲您提供了一個C++ 11庫,而libstdC++(這也是Xcode 4.5中的默認值)爲您提供了一個支持tr1的C++ 03庫。

如果你願意,你可以自動檢測您正在使用的庫:

#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 
+0

謝謝,這個問題解決了 – Aranir

+0

謝謝 - 有同樣的問題,並更改爲GNU庫解決了這個問題對我來說:-) –

0

稍加修改上面的代碼,以避免編譯器投訴:

將以下內容粘貼到#ifdefined(HAVE_TYPE_TRAITS)之前的strvararg.h中

#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

這是我用來構建針對libC++(LLVM C++標準庫)的wxWidgets的命令。應該在優勝美地工作,後來(至少直到蘋果再次打破了一切):

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