2013-05-15 5 views
2

나는 CAN 인터페이스에 연결되는 C++ programm (arm-architecture 용)을 작성 중이다. 표준 소켓, 바인딩, recv 및 보내기 함수를 사용하고 있습니다. 이제 일부 기능을 스레드로 아웃소싱해야하는 시점에 있습니다. 왜냐하면 나는 C++ 0x Threads를 사용하고 싶습니다. 왜냐하면 여기 어딘가에서 pthread가 호환성 문제로 인해 사용되어서는 안되기 때문입니다.C++ 0x 스레드 및 소켓

그래서 스레드 라이브러리 #include <thread>이 포함되어 있습니다. 및

내가 오류를합니다 (note: the mangling of ‘va_list’ has changed in GCC 4.4 메시지를 해제하는 -Wno-psabi이됩니다) 내 컴파일러 통화에 옵션 -Wno-psabi -std=c++0x -lpthread

을 추가됩니다

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&)

스레드 라이브러리의 bind 함수가 소켓의 bind 함수를 오버라이드한다고 생각합니다.

컴파일러에게 어떤 기능을 사용해야하는지 어떻게 알 수 있습니까? arm-linux-gnueabi-g++ 버전 4.4.5

+1

는 C 기능을 위해 ::'bind'를 사용하여 시도하거나 네임 스페이스 std'를 사용하여 '사용하지 않는 'std' 함수 호출을 완전히 한정하십시오. – didierc

+1

:: bind 작동. 하지만 내 'std' 함수 호출을 한정하려고합니다. 고맙습니다! 답으로 게시 할 수 있다면 정답으로 표시 할 것입니다. – baam

답변