2012-07-22 1 views
2

컴파일을 위해 clang 3.1을 사용하는 C++ 11 프로젝트를 가져올 수 없습니다. 컴파일러 명령은 이것이다 :clang libC++ 오류 : overload resolution selected 암시 적으로 삭제 된 복사 할당 연산자

clang++-mp-3.1 -c -std=c++11 -stdlib=libc++ -Wall -g -Iinclude -I/usr/local/include -I/opt/local/include -I/usr/local/include/mongo -o world.o world.cpp 

그리고 나는 "-stdlib = libc의 ++"지시문을 포함하기 때문에 내가 얻을 오류는 이것이다 :

In file included from world.cpp:1: 
/usr/include/c++/v1/string:1952:10: error: overload resolution selected implicitly-deleted copy assignment operator 
    __r_ = _STD::move(__str.__r_); 
     ^
/usr/include/c++/v1/string:1942:9: note: in instantiation of member function 'std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__move_assign' requested here 
     __move_assign(__str, true_type()); 
     ^
/usr/include/c++/v1/string:1961:5: note: in instantiation of member function 'std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__move_assign' requested here 
    __move_assign(__str, integral_constant<bool, 
    ^
/usr/include/c++/v1/utility:200:24: note: in instantiation of member function 'std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::operator=' requested here 
struct _LIBCPP_VISIBLE pair 
        ^
/usr/include/c++/v1/memory:1941:5: note: copy assignment operator is implicitly deleted because '__compressed_pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> 
     >::__rep, std::__1::allocator<char> >' has a user-declared move constructor 
    __compressed_pair(__compressed_pair&& __p) 
    ^
1 error generated. 

사람은 내가 어떻게 나를 조언을 할 수 이걸 작동시킬 수 있니?

컴파일하려고하는 파일에이 오류가 발생하는 C++ 11 코드가 포함되어 있지 않아도 "-stdlib = libC++"지시문만으로도 문제가 해결됩니다.

감사합니다. & 모든 도움을 주셔서 감사합니다. Doug.

UPDATE : 하이 - 코드는 아주 기본적인, 그러나 가능한 기본으로하고, 나는이 오류가 건너 온 :

Undefined symbols for architecture x86_64: 
    "std::__1::cout", referenced from: 
     _main in world.o 
    "std::__1::basic_ostream<char, std::__1::char_traits<char> >::sentry::sentry(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)", referenced from: 
     std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::operator<< <std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*) in world.o 
    "std::__1::ios_base::clear(unsigned int)", referenced from: 
     std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::operator<< <std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*) in world.o 
    "std::__1::basic_ostream<char, std::__1::char_traits<char> >::sentry::~sentry()", referenced from: 
     std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::operator<< <std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*) in world.o 
    "std::__1::ios_base::__set_badbit_and_consider_rethrow()", referenced from: 
     std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::operator<< <std::__1::char_traits<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, char const*) in world.o 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

이 오류를 얻으려면, 내가 벗겨 다시이 내 코드 :

#include <iostream> 
int main(int argc, char *argv[]) 
{ 
    std::cout << "Hi.\n"; 
} 

이는 매우 근본적으로 잘못된 것으로 보입니다.

컴파일러에 "-stdlib = libC++"지시문을 가져올 때이 오류가 표시되지 않습니다.

+1

코드를 입력하십시오. – ForEveR

+0

안녕하세요 - 게시물에 추가했지만 코드에 문제가 없다고 확신합니다. Macport와 함께 설치했지만 내 Clang이 borked 수도 있습니다. – biot023

+0

Mac OSX Lion을 사용하고 있습니까? – mavam

답변

1

아마 llvm 자체에서 clang 설치를 고려해야합니다. 이것은 here입니다. 나는 100 % 확신하지는 않았지만 아마도 macports 또는 비슷한 버전이 설치된 다른 gcc와 비교하여 버전을 컴파일했습니다. llvm 다운로드는 설치되어있는 gcc에 대해 컴파일되며 ABI와 호환 될 수 있어야합니다.

llvm의 지침을 따르는 경우 libC++. dynlib를 업그레이드 할 수 있지만 MAC의 많은 prog가 이에 의존하므로이 경우 기존 lib의 사본을 만들어야합니다. 출혈이 필요하다면 이러한 변화에 다이빙을해야 할 수도 있습니다. 난이 일을 한 Mac 및 완벽하게 괜찮 았 및 C++ 11 코드를 제대로 컴파일 할 수 있습니다.

here

+0

안녕하세요 - 저는 GCC 4를 사용하여 clang 3.1로 최신 llvm (3.1)을 컴파일했습니다.7 불행히도 컴파일 된 clang으로 컴파일하려고하면 위와 똑같은 오류가 발생합니다. – biot023

+0

libC++를 다시 작성 했습니까? 또한 아마도 clang으로 컴파일하려고 시도 할 수도 있습니다. clan --version을 실행할 때 clang을 컴파일하고 설치 한 후에는 clang version 3.2 (trunk 160613)와 비슷하게 보입니다. 나는 정말로 당신이 최신 libC++를 빌드해야한다고 생각한다. 필자의 경우 위의 링크에서 바이너리를 사용 했으므로 (예 : llvm을 컴파일하지 않았 음) 괜찮 았습니다. 누락 된 일부 측면에 대해서도 libC++를 다시 컴파일했습니다. – dirvine

+0

아니요, libC++를 아직 변경하지 않았지만 다음 단계가 될 것으로 생각됩니다. 오늘 밤 일을 끝내고 그 일을하게 될 것입니다. 다시 도움을 주셔서 감사합니다. 정말 감사드립니다. – biot023

0

비슷한 질문 here있다 참조 ++ libc를 구축합니다.

간단히 말해서 가능한 과부하 중 하나가 금지 된 것으로 선언되어 과부하 해결에 실패했기 때문입니다. 이를 해결하려면 명시 적으로 캐스트하여 금지 된 오버로드를 호출의 해결 방법 중 하나가되도록해야합니다.

매우 자세하고 잘 작성된 설명은 연결된 질문에 대한 대답을 참조하십시오.

관련 문제