2012-11-04 22 views
5

tôi sử dụng thư viện wxwidget và tôi có vấn đề sau đây:XCode 4.5 'tr1/type_traits' tập tin không tìm thấy

#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 

ở đây #include không được tìm thấy. Tôi sử dụng trình biên dịch LLVM của Apple 4.1. (với phương ngữ C++ 11). Nếu tôi chuyển sang trình biên dịch LLVM GCC 4.2, tôi không có lỗi ở đó, nhưng vấn đề chính là tất cả các vùi C++ 11 sẽ không hoạt động.

Làm cách nào tôi có thể sử dụng trình biên dịch GCC, nhưng với tiêu chuẩn C++ 11 hoặc làm cho LLVM có thể tìm thấy?

mọi trợ giúp sẽ thực sự được đánh giá cao.

Trả lời

12

Tôi đoán bạn có "Thư viện chuẩn C++" được đặt thành "libC++". Trong trường hợp này, bạn muốn <type_traits>, không phải <tr1/type_traits>. libC++ cung cấp cho bạn một thư viện C++ 11, trong khi libstdC++ (cũng là mặc định trong Xcode 4.5) cung cấp cho bạn thư viện C++ 03 với hỗ trợ tr1.

Nếu bạn muốn, bạn có thể tự động phát hiện mà thư viện bạn đang sử dụng với:

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

Hoặc trong trường hợp của bạn có lẽ:

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

Cảm ơn bạn, điều này đã giải quyết được vấn đề – Aranir

+0

Cảm ơn - có cùng một vấn đề và thay đổi vào thư viện gnu giải quyết nó cho tôi :-) –

0

Hơi sửa đổi mã ở trên, để tránh trình biên dịch khiếu nại:

Dán thông tin sau vào strvararg.h ngay trướC#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

Đây là lệnh tôi đã sử dụng để xây dựng wxWidgets chống lại libC++ (Thư viện chuẩn LLVM C++). Nên làm việc trên Yosemite và sau đó (ít nhất là cho đến khi Apple phá vỡ tất cả mọi thứ một lần nữa):

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