7

我使用 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 可以找到?

任何帮助将非常感激。

4

3 回答 3

13

我猜您将“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
于 2012-11-04T17:12:37.977 回答
5

这是我用来针对 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
于 2017-06-16T17:09:50.423 回答
0

稍微修改了上面的代码,以避免编译器抱怨:

将以下内容粘贴到 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
于 2016-06-04T15:44:59.203 回答