在 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< ...... >
其他失败日志:
/usr/local/boost/include/boost/type_traits/detail/mp_defer.hpp:37:1: 'boost::type_traits_detail::mp_valid_impl'
中没有名为 'type' 的类型
/usr/local/boost/include/boost/type_traits/detail/mp_defer.hpp:37:1: 'boost::type_traits_detail::mp_valid_impl'
中没有名为 'type' 的类型
/usr/local/boost/include/boost/thread/pthread/timespec.hpp:52:42:二进制表达式的无效操作数('const chrono::nanoseconds'(又名'const duration >') 和 'typename boost::enable_if > >, duration > >::type'(又名 'boost::chrono::duration >'))
/usr/local/boost/include/boost/chrono/duration.hpp:405:62: 'boost::common_type'
中没有名为 'type' 的类型
/usr/local/boost/include/boost/thread/pthread/condition_variable_fwd.hpp:239:38:二进制表达式的无效操作数('time_point'(又名'time_point') 和 'steady_clock::time_point'(又名 'time_point'))
/usr/local/boost/include/boost/chrono/duration.hpp:559:17:如果没有转换运算符 [=15,则无法将 'const duration >' 转换为 'CD'(又名 'int') =]
/usr/local/boost/include/boost/type_traits/detail/mp_defer.hpp:37:1: 'boost::type_traits_detail::mp_valid_impl'
中没有名为 'type' 的类型
我已经在线阅读并尝试了几个小时,请帮忙。
谢谢
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
我正在开发一个项目,它结合了使用 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< ...... >
其他失败日志:
/usr/local/boost/include/boost/type_traits/detail/mp_defer.hpp:37:1: 'boost::type_traits_detail::mp_valid_impl'
中没有名为 'type' 的类型/usr/local/boost/include/boost/type_traits/detail/mp_defer.hpp:37:1: 'boost::type_traits_detail::mp_valid_impl'
中没有名为 'type' 的类型/usr/local/boost/include/boost/thread/pthread/timespec.hpp:52:42:二进制表达式的无效操作数('const chrono::nanoseconds'(又名'const duration >') 和 'typename boost::enable_if > >, duration > >::type'(又名 'boost::chrono::duration >'))
/usr/local/boost/include/boost/chrono/duration.hpp:405:62: 'boost::common_type'
中没有名为 'type' 的类型
/usr/local/boost/include/boost/thread/pthread/condition_variable_fwd.hpp:239:38:二进制表达式的无效操作数('time_point'(又名'time_point') 和 'steady_clock::time_point'(又名 'time_point'))
/usr/local/boost/include/boost/chrono/duration.hpp:559:17:如果没有转换运算符 [=15,则无法将 'const duration >' 转换为 'CD'(又名 'int') =]
/usr/local/boost/include/boost/type_traits/detail/mp_defer.hpp:37:1: 'boost::type_traits_detail::mp_valid_impl'
中没有名为 'type' 的类型
我已经在线阅读并尝试了几个小时,请帮忙。 谢谢
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