2

我正在编写一个连接到 CAN 接口的 c++ 程序(用于 arm 架构)。我为此使用标准套接字、绑定、接收和发送功能。现在我需要将一些功能外包给线程。为此,我想使用 C++0x 线程,因为我在这里读到,由于兼容性问题,pthreads 不应该在 c++ 中使用。

所以我包括线程库#include <thread>。并添加到我的编译器调用选项-Wno-psabi -std=c++0x -lpthread

-Wno-psabi是否有禁用note: the mangling of ‘va_list’ has changed in GCC 4.4消息)

我得到的错误是:

25: error: no match for ‘operator<’ in ‘std::bind(_Functor, _ArgTypes ...) [with _Functor = int, _ArgTypes = sockaddr*, unsigned int](((sockaddr*)(&((can*)this)->can::addr)), 16u) < 0

/usr/arm-linux-gnueabi/include/c++/4.4.5/system_error:258: note: candidates are: bool std::operator<(const std::error_condition&, const std::error_condition&)

/usr/arm-linux-gnueabi/include/c++/4.4.5/system_error:177: note: bool std::operator<(const std::error_code&, const std::error_code&)

我认为线程库中的绑定函数正在覆盖套接字中的绑定函数。

我如何告诉编译器何时使用什么函数?

我使用的是arm-linux-gnueabi-g++4.4.5 版

4

1 回答 1

5

尝试使用::bindC 函数,或者不要使用using namespace std并完全限定您的 std 函数调用。

还有中间解决方案,见:

于 2013-05-15T11:14:29.450 回答