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

Linking Boost in Objective C and C++ combined xcode project

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

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

我正在按照下面的 link 来包装跨语言 classes。 http://philjordan.eu/article/mixing-objective-c-c++-and-objective-c++

我参考了下面的 post 但没有解决我的问题。 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< ...... >

其他失败日志:

我已经在线阅读并尝试了几个小时,请帮忙。 谢谢

A) 文件扩展名

LLVM-clang 自动理解文件扩展名,并会使用 clang.

的正确参数编译您的程序

将您的文件重命名为 .mm 扩展名。

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

CXXLAGS += -x objective-c++

B) Headers 包括

如果你缺少include headers那么你需要添加以下内容

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

/path/to/boost为编译后的boost库目录

1.61 版本中的 boost 线程库似乎与 LLVM-clang 中的 Objective C++ 不兼容。我切换到使用原生 C++ 线程来替换为基于 Boost-thread.

的线程 class