簡體   English   中英

clang ++,boost :: spirit和c ++ 11

[英]clang++, boost::spirit and c++11

我正在使用與Xcode 4.6一起打包的clang ++(clang-421.0.60),並遇到了boost :: spirit的問題。 如果我編譯沒有任何標志,一切編譯正常。 如果我用'-std = c ++ 11'編譯,那么我得到以下錯誤(包括“boost / spirit / include / qi.hpp”):

In file included from test_spirit11.cpp:1:
In file included from /usr/local/include/boost/spirit/include/qi.hpp:16:
In file included from /usr/local/include/boost/spirit/home/qi.hpp:14:
In file included from /usr/local/include/boost/spirit/home/qi/action.hpp:14:
In file included from /usr/local/include/boost/spirit/home/qi/action/action.hpp:21:
/usr/local/include/boost/spirit/home/support/action_dispatch.hpp:21:10: fatal error: 
  'type_traits' file not found

#include <type_traits>

問題是使用的默認庫(stdlibc ++)將type_traits定義為'tr1 / type_traits',而boost :: spirit只需要'type_traits'。 我當然可以通過以下方式解決此問題:

 clang++ -std=c++11 -stdlib=libc++ <...>

雖然我很想使用libc ++,但這樣做的實用性很難(很多庫仍然使用並依賴於stdlibc ++)。 因此,我不得不使用libc ++。

有沒有人對如何處理這個有任何建議? 我真的希望更多的庫維護者支持libc ++,或者Apple提供了更新版本的stdlibc ++。 獲得新的c ++ 11功能是一個很大的挫折,但由於缺乏庫支持而無法完全使用它們。

問題是使用的默認庫(stdlibc ++)

它叫做libstdc ++

將type_traits定義為'tr1 / type_traits',而boost :: spirit只需要'type_traits'。

<tr1/type_traits>不是一回事,它完全是一個不同的標題。 boost::spirit想要C ++ 11頭<type_traits>這是一個不同的頭(盡管它們在不同的命名空間中確實包含一些類似的功能。)

問題可能是你正在使用Apple的古老版本的GCC(4.2)附帶的libstdc ++,它不支持C ++ 11。

如果你想使用C ++ 11,你需要使用clang和libc ++,或者安裝一個更新的GCC來獲得更新的libstdc ++。 Apple出於許可原因不會提供更新的GCC,但您可以自行安裝並告訴Xcode如何查找標頭和庫。

如果您不想在boost中使用C ++ 11功能,則可以禁用它。
編輯boost clang.hpp來管理功能。
例如,要禁用type_traits文件未找到錯誤,您可以添加到結尾:

#define BOOST_NO_VARIADIC_TEMPLATES

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM