在Objective C和C ++中链接Boost结合了xcode项目

时间:2016-10-08 00:56:26

标签: c++ objective-c boost objective-c++ boost-thread

我正在开发一个项目,它结合了使用Boost和目标C类的C ++类。当我编写一个在C ++中使用Objective C类的包装器时,我能够构建它,但是当我在目标C中为C ++类编写包装器时,项目无法在boost / thread.hpp中使用语义错误构建。 更具体地说,在boost / type_traits / detail / mp_defer.hpp

我正在使用支持C ++ 11的LLVM C ++

我按照以下链接来包装跨语言类。 http://philjordan.eu/article/mixing-objective-c-c++-and-objective-c++

我提到了以下帖子,但没有解决我的问题。 Use boost library in cocoa project

以下是错误列表:

struct mp_valid_impl
{
template<template<class...> class G, class = G<T...>>
static boost::true_type check(int); //use of undeclared identifier check

template<template<class...> class>
static boost::false_type check(...);

using type = decltype(check<F>(0));//Cannot refer to class template F without template argument list
};

template<template<class...> class F, class... T>
using mp_valid = typename mp_valid_impl<F, T...>::type; //No type named boost in 'boost::type_traits_detail::m_valid_impl< ...... >

其他失败日志:

  • /usr/local/boost/include/boost/type_traits/detail/mp_defer.hpp:37:1:没有名为&#39; type&#39; in&#39; boost :: type_traits_detail :: mp_valid_impl&#39;

  • /usr/local/boost/include/boost/type_traits/detail/mp_defer.hpp:37:1:没有名为&#39; type&#39; in&#39; boost :: type_traits_detail :: mp_valid_impl&#39;

  • /usr/local/boost/include/boost/thread/pthread/timespec.hpp:52:42:二进制表达式的操作数无效(&#39; const chrono :: nanoseconds&#39;(又名& #39; const duration&gt;&#39;)和&#39; typename boost :: enable_if&gt;&gt;,duration&gt;&gt; :: type&#39;(又名&#39; boost :: chrono ::持续时间&gt;&#39;))

  • /usr/local/boost/include/boost/chrono/duration.hpp:405:62:没有名为&#39; type&#39;在&#39; boost :: common_type&#39;

  • /usr/local/boost/include/boost/thread/pthread/condition_variable_fwd.hpp:239:38:二进制表达式的操作数无效(&#39; time_point&#39;(又名&#39; time_point& #39;)和&#39; steady_clock :: time_point&#39;(又名&#39; time_point&#39;))

  • /usr/local/boost/include/boost/chrono/duration.hpp:559:17:无法转换&#const;持续时间&gt;&#39;到&#39; CD&#39; (又名&#39; int&#39;)没有转换运算符

  • /usr/local/boost/include/boost/type_traits/detail/mp_defer.hpp:37:1:没有名为&#39; type&#39; in&#39; boost :: type_traits_detail :: mp_valid_impl&#39;

我一直在网上阅读并尝试了几个小时,请帮忙。 感谢

2 个答案:

答案 0 :(得分:0)

A)文件扩展名

LLVM-clang自动理解文件扩展名,并使用clang的正确参数编译您的程序。

将文件重命名为.mm分机号。

或者使用-x objective-c++选项进行编译。

CXXLAGS += -x objective-c++

B)标题包括

如果您缺少包含标题,则需要添加以下内容

CXXLAGS += -I/path/to/boost/

/path/to/boost是已编译的boost库的目录。

答案 1 :(得分:0)

版本1.61中的boost线程库似乎与LLVM-clang中的Objective C ++不兼容。我转而使用本机C ++ Thread来替换基于Boost-thread的线程类。