기이. 그래서 (표준 : : 배열 등을 사용) ++은 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
3.1 아니라면 다음은/usr/포함/C++하지 당신이 – Mark
사자가 3.0를 연타했다, 그래서 나는 MacPorts를 사용하고 싶은./usr/include/C++를 사용하지 않도록 include 경로에 무엇을 넣어야합니까? 참고 :'-I/opt/local/include'를 사용했고 컴파일 할 때 std :: regex에서 이상한 이동 생성자 오류가 발생합니다. 사자는 당신은 그 소리에 대한 MacPorts를 필요하지 않습니다 – DanB91
경우 - 내가 엑스 코드 3.1 있었지만 최근의 명령 줄 도구를 설치하고 내 프로젝트는 이제 컴파일 것을 몰랐다 – Mark