2017-01-30 1 views
1

Je suis en train de charger des données YAML en C++ dans une configuration avec cmake et gcc (en utilisant Ubuntu), mais j'obtiens une erreur que je ne peux pas résoudre.yaml-cpp référence non définie avec CMake

Jusqu'à présent, je l'ai fait ce qui suit:

clonés le repo yaml-cpp, créé build, utilisé cmake .. et make pour construire la bibliothèque et les fichiers copiés Downloads/yaml-cpp/build/include/yaml-cpp/-myproject/include/yaml-cpp/.

De plus, j'ai un exemple de travail minimum qui reproduit l'erreur comme suit:

CMakeLists.txt:

cmake_minimum_required(VERSION 3.6) 
project(YAML_TEST) 

set(CMAKE_CXX_STANDARD 11) 
include_directories("include") 

add_library(YAML_LIB include/yaml-cpp/yaml.h) 
set_target_properties(YAML_LIB PROPERTIES LINKER_LANGUAGE CXX) 

set(SOURCE_FILES main.cpp) 
add_executable(YAML_TEST ${SOURCE_FILES}) 
target_link_libraries(YAML_TEST YAML_LIB) 

main.cpp:

#include <iostream> 
#include <string.h> 
#include "include/yaml-cpp/yaml.h" 

int main() { 
    YAML::Node config = YAML::LoadFile("test.yaml"); 
    std::cout << "tag: " << config["tag"].as<std::string>() << "\n"; 

    return 0; 
} 

Et j'ai aussi un petit yaml fichier (test.yaml), qui contient:

tag: "This is a text" 
category: 
    anothertag: 123 

Cependant, si je tente de compiler le projet, je reçois l'erreur

/home/david/Desktop/myproject/main.cpp:6: undefined reference to `YAML::LoadFile(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)' ... 

Je suppose que le projet ne trouve pas correctement la bibliothèque yaml-cpp. Mais je ne suis pas capable de résoudre cela.

Répondre

1

La ligne

add_library(YAML_LIB include/yaml-cpp/yaml.h) 

va essayer de faire une bibliothèque en utilisant uniquement le fichier d'en-tête, qui n'aura aucun des symboles qui composent yaml-cpp. Vous devez construire la bibliothèque et l'installer.

+0

Cela m'a orienté dans la bonne direction. J'ai lancé 'make' au lieu de' make install'. – David

+0

Pour quelqu'un qui est bloqué avec les mêmes problèmes que j'avais, après 'make install', vous devez également lier le yaml-cpp dans cmake en utilisant' target_link_libraries (YAML_TEST yaml-cpp) ' – David