2013-04-25 2 views
3

나는 간단한 코드 그 소리와clang 3.2가 std :: atomic에서 실패합니다 - libC++ 문제입니까?

#include <atomic> 
int bar = 0; 
void foo(std::atomic<int>&flag) 
{ bar = flag; } 

를 컴파일하려고 ++ 3.2 (llvm.org에서 LLVM 3.2로 다운로드, 맥은 10.8.3을 os.x에서이 오류와 함께 실패

/> clang++ -std=c++11 -stdlib=libc++ -O3 -march=native -c test.cc

In file included from test.cc:1:

/usr/include/c++/v1/atomic:576:17: error: first argument to atomic operation must be a pointer to non-const _Atomic type ('const _Atomic(int) *' invalid)

{return __c11_atomic_load(&__a_, __m);} 
     ^    ~~~~~ 

/usr/include/c++/v1/atomic:580:53: note: in instantiation of member function 'std::_1::_atomic_base::load' requested here

operator _Tp() const _NOEXCEPT   {return load();} 
               ^

test.cc:5:9: note: in instantiation of member function 'std::_1::_atomic_base::operator int' requested here

bar = done; 

때 libC++는 두 경우 모두/usr/lib/C++/v1에 있습니다.

나는 무엇이 누락 되었는가? (나는 OS/X에서 제공되는/usr/bin/clang ++을 사용한다. 거기에 또 다른 libC++는 llvm 3.2와 함께 제공되지만, 나는 실종 되었는가? (나는 아무 것도 찾을 수 없다. clang3.2 트리에서).

+0

오히려 라이브러리 문제 (가짜'const')처럼 보입니다. 그리고 libC++는 LLVM 우산에 포함되어 있으므로 올바른 라이브러리를 사용해야합니다. –

+0

@MatthieuM. 나는 이해하지 못한다./usr/include/C++/v1의 libC++에는 llvm3.2 다운로드가 없었지만 OS는 포함되었습니다. 그러나 xcode는 자체 버전을 가지고있는 것으로 보입니다 (답변 참조). 그래서 "우산"이란 무엇을 의미합니까? – Walter

+0

LLVM은 (상대적으로) 명확한 목표를 가진 오픈 소스 프로젝트입니다. LLVM 우산은 LLVM과 관련된 프로젝트를 말합니다. 대부분이 프로젝트는 LLVM SVN 서버에서 호스팅됩니다. Clang, libC++ 및 lldb는 LLVM에 의해 호스팅되는 것으로 간주 할 수 있습니다. 즉, 새로운 LLVM을 사용하고 libC++가 아닌 다른 libC++가 시스템의 어딘가에 놓여있는 것입니다. –

답변

1

Xcode는 이제 Xcode.app 디렉토리 내에 libC++를 번들합니다. Xcode.app를 control- 클릭하고 "Show Package Contents"를 선택하여이 디렉토리를 검사 할 수 있습니다.

+0

'/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/C++/v1/' (* Toolchains *와 함께 이상한 디렉토리 이름)에 또 다른 libC++가 있으며 그 '원자'는 '__a_'을 (를) 변경할 수 있다고 선언했습니다. 그리고 이것은 문제를 해결합니다. 내가 아직도 얻지 못하는 것은 내 노트북에이 두 가지 버전이있는 이유입니다. 다른 버전의 abi도 있습니까? – Walter

+0

Xcode는 libC++의 위치를 ​​/ usr/include에서 internal로 변경했습니다. 설치 프로그램이 삭제하는 대신/usr/include를 떠났다. 동일한 abi, __1은 여전히 ​​최신 상태입니다. –

관련 문제