undefined reference to YAML::LoadFile

后端 未结 5 612
梦如初夏
梦如初夏 2020-12-19 17:49

I\'m trying to use the new version of libyaml-cpp and having linker problems (undefined reference to \'YAML::LoadFile(std::basic_string

相关标签:
5条回答
  • 2020-12-19 18:22

    Support new yaml-cpp API.

    find_package(PkgConfig)
    pkg_check_modules(YAMLCPP REQUIRED yaml-cpp>=0.5)
    include_directories(${YAMLCPP_INCLUDE_DIRS})
    
    add_executable(name src/name.cpp)
    target_link_libraries(name ${catkin_LIBRARIES}  ${YAMLCPP_LIBRARIES})
    
    0 讨论(0)
  • 2020-12-19 18:26

    It's an ordering problem on the command-line. I guess I'll just never understand GCC command-line logic. Simply putting the library at the end seems to work:

    g++ -L/usr/local/lib -I/usr/local/include -std=c++0x -o $@  $^ -lyaml-cpp
    
    0 讨论(0)
  • 2020-12-19 18:38

    I have been struggling over this for the whole evening today. As I found no useful info anywhere in the internet, I post my results here:

    Using OSX El Capitan with new versions of XCode (7.3) and CLang (Apple LLVM version 7.3.0 (clang-703.0.29) Using yaml-cpp 0.5.3

    Things I did to make it work:

    1. Obtain FindYamlCpp.cmake from the internet. Save it in /usr/local/share/cmake/Modules
    2. Set CMakeFiles.txt to find Yaml-cpp

      # YAML with yaml-cpp
      SET(YAMLCPP_STATIC_LIBRARY TRUE)
      FIND_PACKAGE(YamlCpp)
      IF(YamlCpp_FOUND)
          MESSAGE("yaml-cpp Library FOUND: yaml-cpp related sources will be built.")
      ELSEIF(YamlCpp_FOUND)
          MESSAGE("yaml-cpp Library NOT FOUND!")
      ENDIF(YamlCpp_FOUND)
      
    3. Add code to src/CmakeFiles.txt to use FindYamlCpp

          # Enable Yaml 
          IF(YAMLCPP_FOUND)
              ADD_EXECUTABLE(my_exec my_source.cpp)
          ENDIF(YAMLCPP_FOUND)
      
    4. Using for example ccmake:

      1. set CMAKE_MODULE_PATH to /usr/local/share/cmake/Modules
      2. Set CMAKE_EXEC_LINKER_FLAGS to -lyaml-cpp
    0 讨论(0)
  • 2020-12-19 18:42

    I fixed the issue by adjusting my CMakeList.txt

    I had no issues building like stated above:

     g++ -L/usr/local/lib -I/usr/local/include -std=c++0x main.cpp -lyaml-cpp
    

    But using cmake and building via CLion failed for me.

    This CMakeList.txt fixed it for me (this is just a minimal stripped down Version, but it should give an idea). It assumes there is only one version of yaml-cpp installed on your system:

    # Projekt Description / etc
    cmake_minimum_required(VERSION 3.14)
    project(yaml_cpp)
    set(CMAKE_CXX_STANDARD 14)
    
    # Declaration of package required
    find_package(PkgConfig)
    pkg_check_modules(YAMLCPP REQUIRED yaml-cpp>=0.5)
    
    # Define the executable and link the yaml libs
    add_executable(yaml_cpp main.cpp)
    target_link_libraries(yaml_cpp ${YAMLCPP_LIBRARIES})
    

    This was the most minimalistic way of getting things to work. I was inspired by Sinaí Aranda above.

    0 讨论(0)
  • 2020-12-19 18:47

    Do you have the old version of the library installed too? It's possible that gcc is looking for that version first, and doesn't consider the new one.

    0 讨论(0)
提交回复
热议问题