I\'m trying to use the new version of libyaml-cpp and having linker problems (undefined reference to \'YAML::LoadFile(std::basic_string
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})
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
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:
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)
Add code to src/CmakeFiles.txt to use FindYamlCpp
# Enable Yaml
IF(YAMLCPP_FOUND)
ADD_EXECUTABLE(my_exec my_source.cpp)
ENDIF(YAMLCPP_FOUND)
Using for example ccmake:
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.
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.