2017-12-30 58 views
0

내 프로젝트에 yaml-cpp을 사용하려고합니다. 내 프로젝트에서 자식 서브 모듈 인 yaml-cpp와 내 프로젝트를 빌드 할 때 cmake를 사용하고 있습니다.CMake - git 하위 모듈로 정적 yaml-cpp와 링커 오류가 발생했습니다.

내 컴퓨터에 부스트 라이브러리가 있습니다 (yaml-cpp 필요).

정적으로 작성 중입니다. 내 주요 CMakeLists.txt에서 add_subdirectory을 사용하면 target_link_libraries(components yaml-cpp) (구성 요소은 내 프로젝트의 다른 모듈에서 사용하는 정적 라이브러리입니다)을 사용하십시오.

나는 내 소스 파일 중 하나에 대한 연결 단계에서 오류가 있습니다

CMakeFiles/rsa-packer.dir/options/addObject.cpp.o : In function « YAML::detail::node& YAML::detail::node_data::get<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::shared_ptr<YAML::detail::memory_holder>) » : 
~/git/apps/rsa-packer/options/addObject.cpp:(.text._ZN4YAML6detail9node_data3getINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEERNS0_4nodeERKT_N5boost10shared_ptrINS0_13memory_holderEEE[_ZN4YAML6detail9node_data3getINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEERNS0_4nodeERKT_N5boost10shared_ptrINS0_13memory_holderEEE]+0x157) : undefined reference to: « YAML::detail::node_data::convert_to_map(boost::shared_ptr<YAML::detail::memory_holder>) » 

내가 메이크업 출력을 확인의 -lyaml-CPP 옵션이 있습니다. 가 나는 기능을 포함의 libyaml-cpp.a 파일을 확인 (하지만 난 정말 나노의 출력을 이해하지 않습니다

000000000000005d r .L__PRETTY_FUNCTION__._ZN4YAML6detail9node_data14convert_to_mapESt10shared_ptrINS0_13memory_holderEE 
0000000000000940 T _ZN4YAML6detail9node_data14convert_to_mapESt10shared_ptrINS0_13memory_holderEE 

이상한 것은입니다 :

// this works 
YAML::Node node = YAML::Load(manifest.getStream()); 

// this does not work 
if(node["objects"]) { 
    std::cout << "no objects" << std::endl; 
} 

내가 할 수있는 YAML::Load 함수를 사용하여 노드 객체를 빌드하고 정적 라이브러리에서 찾을 수 있습니다.

그러나 lib에 함수가 없기 때문에 node["..."]을 호출 할 수 없습니다.

이 오류의 원인에 대해서는 알지 못합니다.

문제가 발생할 수 있는지는 잘 모르겠지만 C++ 14에서 프로젝트를 컴파일하고 yaml-cpp lib는 C++ 11을 사용하여 빌드됩니다.

감사합니다.

답변

0

좋아, 나는 ... 피곤했다

MongoDB를 이미 내 컴퓨터에 YAML-CPP를 설치했다. 나는 방금 소스에서 컴파일 된 정적 라이브러리 mongodb에서 헤더 파일을 사용하고 있었다 ... 헤더는 boost::shared_ptr으로 함수를 호출하고 내 라이브러리는 다음을 사용하여 구현되었다. std::shared_ptr