2012-07-08 2 views
2

기이. 그래서 (표준 : : 배열 등을 사용) ++은 libc로 전환하기로 결정하지만 부스트 (특히 ASIO 및 정규식)를 사용했다, 그래서 나는 ++ libc를 사용하여 밀어 다시 컴파일해야했다. 내가 macports에 설치되었고 소스에서 부스트 빌드를 제거하고 지금은/usr/local/include와/usr/local/lib에 설치되었다. 그 이후로 나는 컴파일 할 수 없다. 여기가 발생하고있는 기이은 다음과 같습니다 연타 부스트 I (특히 MacPorts를 3.1 연타) ++ 애완 동물 프로젝트를하고있는 중이 야하고 그 소리를 사용하고

clang++ -g -std=c++11 -stdlib=libc++ -c main.cpp 

내가 이동 생성자 (이 오류에 더있어 함께 할 필요 이상한 컴파일 오류를 얻을 수 있지만, 당신은 오는 볼 수 있습니다 :

것은 실행할 때) 부스트에서 그러나

/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/local/include/boost/regex/v4/perl_matcher.hpp:207:16: note: in instantiation of member function 'std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::operator=' requested here 
     s1 = traits_inst.transform(a, a + 1); 

, 내가 실행하는 경우 (이하 "-I"을 참고하시기 바랍니다, 그리고) 그 정확한 위치에 있어야합니다 :

clang++ -I -std=c++11 -stdlib=libc++ -g -c main.cpp 

이것은 컴파일되지만 (나중에 링크가 실패 함). 왜 이런거야? - 나는 길없이 무엇을합니까? -stdlib 앞에 -I를 사용해야합니까?

이제 재미있는 부분 : 비록

, 모든 것이 지금 컴파일이 연결되지 않습니다. 실행할 때 :

clang++ main.o FTPClient.o FTPConnection.o -lboost_system -lboost_regex -std=c++11 -stdlib=libc++ -g -o cli 

을 나는 메시지가 :

Undefined symbols for architecture x86_64: 
"__ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initIPKcEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESA_SA_", referenced from: 
    boost::re_detail::cpp_regex_traits_implementation<char>::lookup_collatename(char const*, char const*) const in libboost_regex.a(instances.o) 
    boost::re_detail::cpp_regex_traits_implementation<char>::lookup_classname_imp(char const*, char const*) const in libboost_regex.a(instances.o) 
    boost::re_detail::basic_regex_parser<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::fail(boost::regex_constants::error_type, long, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, long) in libboost_regex.a(instances.o) 
    boost::re_detail::cpp_regex_traits_implementation<char>::lookup_classname(char const*, char const*) const in libboost_regex.a(instances.o) 
    ld: symbol(s) not found for architecture x86_64 

지금 나는 어쩌면 내가 얼마간 -lboost 플래그 누락 생각하고 있지만 그것이 무엇인지 확실하지 않다. 이것에 대한 이유는 무엇일까요?

대단히 감사합니다.

..failed clang-darwin.link.dll /usr/local/lib/libboost_filesystem.dylib... 
clang-darwin.link.dll /usr/local/lib/libboost_regex.dylib 
Undefined symbols for architecture x86_64: 
    "__ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initIPKcEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESA_SA_", referenced from: 
    boost::c_regex_traits<char>::transform(char const*, char const*) in c_regex_traits.o 
    boost::c_regex_traits<char>::lookup_classname(char const*, char const*) in c_regex_traits.o 
    boost::c_regex_traits<char>::lookup_collatename(char const*, char const*) in c_regex_traits.o 
    boost::re_detail::RegExData::update() in cregex.o 
    boost::RegEx::What(int) const in cregex.o 
    boost::re_detail::pred2::operator()(boost::match_results<char const*, std::__1::allocator<boost::sub_match<char const*> > > const&) in cregex.o 
    boost::re_detail::cpp_regex_traits_implementation<char>::lookup_collatename(char const*, char const*) const in instances.o 
    ... 
    "__ZNSt3__112basic_stringIwNS_11char_traitsIwEENS_9allocatorIwEEE6__initIPKwEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESA_SA_", referenced from: 
    boost::c_regex_traits<wchar_t>::transform(wchar_t const*, wchar_t const*) in wc_regex_traits.o 


    boost::c_regex_traits<wchar_t>::lookup_classname(wchar_t const*, wchar_t const*) in wc_regex_traits.o 
    boost::re_detail::cpp_regex_traits_implementation<wchar_t>::lookup_collatename(wchar_t const*, wchar_t const*) const in winstances.o 
    boost::re_detail::cpp_regex_traits_implementation<wchar_t>::lookup_classname_imp(wchar_t const*, wchar_t const*) const in winstances.o 
    boost::re_detail::cpp_regex_traits_implementation<wchar_t>::lookup_classname(wchar_t const*, wchar_t const*) const in winstances.o 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

이이 -libC++와 아마 호환되지 않는 부스트 정규식을 뜻 : 부스트를 설치하는 로그를 보면, 내가 이것을 발견 :

EDIT?

편집 2 : 나는 표준 : 정규식을 사용하여 시도,하지만 난이 얻을 :

Undefined symbols for architecture x86_64: 
    "__ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initIPKcEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESA_SA_", referenced from: 
    std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > std::__1::regex_traits<char>::__lookup_collatename<char const*>(char const*, char const*, char) const in main.o 
    unsigned int std::__1::regex_traits<char>::__lookup_classname<char const*>(char const*, char const*, bool, char) const in main.o 
ld: symbol(s) not found for architecture x86_64 
+0

3.1 아니라면 다음은/usr/포함/C++하지 당신이 – Mark

+0

사자가 3.0를 연타했다, 그래서 나는 MacPorts를 사용하고 싶은./usr/include/C++를 사용하지 않도록 include 경로에 무엇을 넣어야합니까? 참고 :'-I/opt/local/include'를 사용했고 컴파일 할 때 std :: regex에서 이상한 이동 생성자 오류가 발생합니다. 사자는 당신은 그 소리에 대한 MacPorts를 필요하지 않습니다 – DanB91

+0

경우 - 내가 엑스 코드 3.1 있었지만 최근의 명령 줄 도구를 설치하고 내 프로젝트는 이제 컴파일 것을 몰랐다 – Mark

답변

2

도움이 있지만, 만족스럽지 못한 답변 : libc의를 ++ :: 대신의 부스트 사용할 수있는, 표준 : 정규 표현식을 포함 정규식. 사자는 다음 엑스 코드는 그 소리가 포함 된 경우 OSX 사용중인

+0

'clang -stdlib = libC++ -std = C++ 11'로 부스트를 만드셨습니까? –

+1

예 : "./b2 toolset = clang cxxflags ="- I -std = C++ 11 -stdlib = libC++ "linkflags ="- stdlib = libC++ " 건물을 짓는 동안 같은 이상한 이동 생성자 오류를 보았습니다) - 몇 번 사용합니다. – DanB91

+0

또한 std :: regex를 사용했지만 연결 오류가 발생합니다 (내 편집 된 게시물 참조). libC++ 설치가 엉망이 될 수 있습니까? MacPorts clang은 libC++ 바이너리도 함께 제공됩니까? (분명히 .cpp 파일을 컴파일 할 때 헤더가 함께 제공됩니다)? – DanB91