2015-03-22 1 views
1

Je suis sur Manjaro Linux en utilisant gcc et codelite pour compiler mon code. C'est un projet avec sfml et yaml-cpp en C++.référence undefined yaml-cpp

Ma version de GCC est 4.9.2 (20150304)

drapeaux de compilateur GCC sont -pg; -g; -O0; -O2; -Wall; std = C++ 14

Mon yaml Version -cpp est 0.5.1-1

Quand je compile j'ai les erreurs Suivis:

/bin/sh -c '/usr/bin/make -j4 -e -f "MyProject.mk" all' 
----------Building project:[ MyProject - Debug ]---------- 
/usr/bin/g++ -c "/home/myuser/.codelite/MyProject/MyProject/sprite.cpp" -pg -g -O0 -O2 -Wall -std=c++14 -o ./Debug/sprite.cpp.o -I. -I/usr/include/ 
/usr/bin/g++ -c "/home/myuser/.codelite/MyProject/MyProject/tile.cpp" -pg -g -O0 -O2 -Wall -std=c++14 -o ./Debug/tile.cpp.o -I. -I/usr/include/ 
/usr/bin/g++ -c "/home/myuser/.codelite/MyProject/MyProject/main.cpp" -pg -g -O0 -O2 -Wall -std=c++14 -o ./Debug/main.cpp.o -I. -I/usr/include/ 
/usr/bin/g++ -c "/home/myuser/.codelite/MyProject/MyProject/grid.cpp" -pg -g -O0 -O2 -Wall -std=c++14 -o ./Debug/grid.cpp.o -I. -I/usr/include/ 
/usr/bin/g++ -c "/home/myuser/.codelite/MyProject/MyProject/loader.cpp" -pg -g -O0 -O2 -Wall -std=c++14 -o ./Debug/loader.cpp.o -I. -I/usr/include/ 
/usr/bin/g++ -o ./Debug/MyProject @"MyProject.txt" -L. -L/lib/ -lsfml-graphics -lsfml-window -lsfml-system -lsfml-network -lsfml-audio 
./Debug/loader.cpp.o: in function « Mercenaries::Loader::Loader(std::string, std::vector<std::string, std::allocator<std::string> >) »: 
/home/myuser/.codelite/MyProject/MyProject/loader.cpp:10: undefined reference to « YAML::LoadFile(std::string const&) » 
./Debug/loader.cpp.o: in function « YAML::detail::node_ref::set_null() »: 
/usr/include/yaml-cpp/node/detail/node_ref.h:34: undefined reference to « YAML::detail::node_data::set_null() » 
./Debug/loader.cpp.o: in function « YAML::Node::AssignNode(YAML::Node const&) »: 
/usr/include/yaml-cpp/node/impl.h:270: undefined reference to « YAML::detail::memory_holder::merge(YAML::detail::memory_holder&) » 
./Debug/loader.cpp.o: in function « YAML::detail::node_ref::mark_defined() »: 
/usr/include/yaml-cpp/node/detail/node_ref.h:29: undefined reference to « YAML::detail::node_data::mark_defined() » 
/usr/include/yaml-cpp/node/detail/node_ref.h:29: undefined reference to « YAML::detail::node_data::mark_defined() » 
/usr/include/yaml-cpp/node/detail/node_ref.h:29: undefined reference to « YAML::detail::node_data::mark_defined() » 
/usr/include/yaml-cpp/node/detail/node_ref.h:29: undefined reference to « YAML::detail::node_data::mark_defined() » 
/usr/include/yaml-cpp/node/detail/node_ref.h:29: undefined reference to « YAML::detail::node_data::mark_defined() » 
./Debug/loader.cpp.o: in function « YAML::detail::memory_holder::create_node() »: 
/usr/include/yaml-cpp/node/detail/memory.h:30: undefined reference to « YAML::detail::memory::create_node() » 
./Debug/loader.cpp.o: in function « YAML::detail::node_ref::mark_defined() »: 
/usr/include/yaml-cpp/node/detail/node_ref.h:29: undefined reference to « YAML::detail::node_data::mark_defined() » 
/usr/include/yaml-cpp/node/detail/node_ref.h:29: undefined reference to « YAML::detail::node_data::mark_defined() » 
/usr/include/yaml-cpp/node/detail/node_ref.h:29: undefined reference to « YAML::detail::node_data::mark_defined() » 
/usr/include/yaml-cpp/node/detail/node_ref.h:29: undefined reference to « YAML::detail::node_data::mark_defined() » 
/usr/include/yaml-cpp/node/detail/node_ref.h:29: undefined reference to « YAML::detail::node_data::mark_defined() » 
./Debug/loader.cpp.o:/usr/include/yaml-cpp/node/detail/node_ref.h:29: more undefined reference follow to « YAML::detail::node_data::mark_defined() » 
./Debug/loader.cpp.o: in function « YAML::detail::node_ref::set_null() »: 
/usr/include/yaml-cpp/node/detail/node_ref.h:34: undefined reference to « YAML::detail::node_data::set_null() » 
./Debug/loader.cpp.o: in function « YAML::Node::AssignNode(YAML::Node const&) »: 
/usr/include/yaml-cpp/node/impl.h:270: undefined reference to « YAML::detail::memory_holder::merge(YAML::detail::memory_holder&) » 
./Debug/loader.cpp.o: in function « YAML::detail::node_ref::mark_defined() »: 
/usr/include/yaml-cpp/node/detail/node_ref.h:29: undefined reference to « YAML::detail::node_data::mark_defined() » 
/usr/include/yaml-cpp/node/detail/node_ref.h:29: undefined reference to « YAML::detail::node_data::mark_defined() » 
/usr/include/yaml-cpp/node/detail/node_ref.h:29: undefined reference to « YAML::detail::node_data::mark_defined() » 
/usr/include/yaml-cpp/node/detail/node_ref.h:29: undefined reference to « YAML::detail::node_data::mark_defined() » 
/usr/include/yaml-cpp/node/detail/node_ref.h:29: undefined reference to « YAML::detail::node_data::mark_defined() » 
./Debug/loader.cpp.o: in function « YAML::detail::memory_holder::create_node() »: 
/usr/include/yaml-cpp/node/detail/memory.h:30: undefined reference to « YAML::detail::memory::create_node() » 
./Debug/loader.cpp.o: in function « YAML::detail::node_ref::mark_defined() »: 
/usr/include/yaml-cpp/node/detail/node_ref.h:29: undefined reference to « YAML::detail::node_data::mark_defined() » 
/usr/include/yaml-cpp/node/detail/node_ref.h:29: undefined reference to « YAML::detail::node_data::mark_defined() » 
/usr/include/yaml-cpp/node/detail/node_ref.h:29: undefined reference to « YAML::detail::node_data::mark_defined() » 
/usr/include/yaml-cpp/node/detail/node_ref.h:29: undefined reference to « YAML::detail::node_data::mark_defined() » 
/usr/include/yaml-cpp/node/detail/node_ref.h:29: undefined reference to « YAML::detail::node_data::mark_defined() » 
./Debug/loader.cpp.o: in function « YAML::detail::memory_holder::create_node() »: 
/usr/include/yaml-cpp/node/detail/memory.h:30: undefined reference to « YAML::detail::memory::create_node() » 
./Debug/loader.cpp.o: in function « YAML::detail::node_ref::mark_defined() »: 
/usr/include/yaml-cpp/node/detail/node_ref.h:29: undefined reference to « YAML::detail::node_data::mark_defined() » 
/usr/include/yaml-cpp/node/detail/node_ref.h:29: undefined reference to « YAML::detail::node_data::mark_defined() » 
/usr/include/yaml-cpp/node/detail/node_ref.h:29: undefined reference to « YAML::detail::node_data::mark_defined() » 
/usr/include/yaml-cpp/node/detail/node_ref.h:29: undefined reference to « YAML::detail::node_data::mark_defined() » 
/usr/include/yaml-cpp/node/detail/node_ref.h:29: undefined reference to « YAML::detail::node_data::mark_defined() » 
./Debug/loader.cpp.o: in function « YAML::detail::node_ref::set_null() »: 
/usr/include/yaml-cpp/node/detail/node_ref.h:34: undefined reference to « YAML::detail::node_data::set_null() » 
/usr/include/yaml-cpp/node/detail/node_ref.h:34: undefined reference to « YAML::detail::node_data::set_null() » 
./Debug/loader.cpp.o: in function « YAML::detail::memory_holder::create_node() »: 
/usr/include/yaml-cpp/node/detail/memory.h:30: undefined reference to « YAML::detail::memory::create_node() » 
./Debug/loader.cpp.o: in function « YAML::detail::node_ref::mark_defined() »: 
/usr/include/yaml-cpp/node/detail/node_ref.h:29: undefined reference to « YAML::detail::node_data::mark_defined() » 
/usr/include/yaml-cpp/node/detail/node_ref.h:29: undefined reference to « YAML::detail::node_data::mark_defined() » 
/usr/include/yaml-cpp/node/detail/node_ref.h:29: undefined reference to « YAML::detail::node_data::mark_defined() » 
/usr/include/yaml-cpp/node/detail/node_ref.h:29: undefined reference to « YAML::detail::node_data::mark_defined() » 
/usr/include/yaml-cpp/node/detail/node_ref.h:29: undefined reference to « YAML::detail::node_data::mark_defined() » 
./Debug/loader.cpp.o:/usr/include/yaml-cpp/node/detail/node_ref.h:29: more undefined reference follow to « YAML::detail::node_data::mark_defined() » 
./Debug/loader.cpp.o: in function « YAML::detail::node& YAML::detail::node_data::get<std::string>(std::string const&, boost::shared_ptr<YAML::detail::memory_holder>) »: 
/usr/include/yaml-cpp/node/detail/impl.h:89: undefined reference to « YAML::detail::node_data::convert_to_map(boost::shared_ptr<YAML::detail::memory_holder>) » 
./Debug/loader.cpp.o: in function « YAML::detail::memory_holder::create_node() »: 
/usr/include/yaml-cpp/node/detail/memory.h:30: undefined reference to « YAML::detail::memory::create_node() » 
./Debug/loader.cpp.o: in function « YAML::detail::node_ref::mark_defined() »: 
/usr/include/yaml-cpp/node/detail/node_ref.h:29: undefined reference to « YAML::detail::node_data::mark_defined() » 
/usr/include/yaml-cpp/node/detail/node_ref.h:29: undefined reference to « YAML::detail::node_data::mark_defined() » 
/usr/include/yaml-cpp/node/detail/node_ref.h:29: undefined reference to « YAML::detail::node_data::mark_defined() » 
/usr/include/yaml-cpp/node/detail/node_ref.h:29: undefined reference to « YAML::detail::node_data::mark_defined() » 
/usr/include/yaml-cpp/node/detail/node_ref.h:29: undefined reference to « YAML::detail::node_data::mark_defined() » 
./Debug/loader.cpp.o: in function « YAML::detail::node_ref::set_scalar(std::string const&) »: 
/usr/include/yaml-cpp/node/detail/node_ref.h:35: undefined reference to « YAML::detail::node_data::set_scalar(std::string const&) » 
./Debug/loader.cpp.o: in function « convert_to_node<std::basic_string<char> > »: 
/usr/include/yaml-cpp/node/detail/impl.h:162: undefined reference to « YAML::detail::memory_holder::merge(YAML::detail::memory_holder&) » 
./Debug/loader.cpp.o: in function « YAML::detail::memory_holder::create_node() »: 
/usr/include/yaml-cpp/node/detail/memory.h:30: undefined reference to « YAML::detail::memory::create_node() » 
./Debug/loader.cpp.o: in function « YAML::detail::node& YAML::detail::node_data::get<std::string>(std::string const&, boost::shared_ptr<YAML::detail::memory_holder>) »: 
/usr/include/yaml-cpp/node/detail/impl.h:102: undefined reference to « YAML::detail::node_data::insert_map_pair(YAML::detail::node&, YAML::detail::node&) » 
./Debug/loader.cpp.o: in function « YAML::detail::memory_holder::create_node() »: 
/usr/include/yaml-cpp/node/detail/memory.h:30: undefined reference to « YAML::detail::memory::create_node() » 
./Debug/loader.cpp.o: in function « YAML::detail::node_ref::mark_defined() »: 
/usr/include/yaml-cpp/node/detail/node_ref.h:29: undefined reference to « YAML::detail::node_data::mark_defined() » 
/usr/include/yaml-cpp/node/detail/node_ref.h:29: undefined reference to « YAML::detail::node_data::mark_defined() » 
/usr/include/yaml-cpp/node/detail/node_ref.h:29: undefined reference to « YAML::detail::node_data::mark_defined() » 
/usr/include/yaml-cpp/node/detail/node_ref.h:29: undefined reference to « YAML::detail::node_data::mark_defined() » 
/usr/include/yaml-cpp/node/detail/node_ref.h:29: undefined reference to « YAML::detail::node_data::mark_defined() » 
./Debug/loader.cpp.o: in function « YAML::detail::node_ref::set_null() »: 
/usr/include/yaml-cpp/node/detail/node_ref.h:34: undefined reference to « YAML::detail::node_data::set_null() » 
./Debug/loader.cpp.o: in function « YAML::detail::memory_holder::create_node() »: 
/usr/include/yaml-cpp/node/detail/memory.h:30: undefined reference to « YAML::detail::memory::create_node() » 
./Debug/loader.cpp.o: in function « YAML::detail::node_ref::mark_defined() »: 
/usr/include/yaml-cpp/node/detail/node_ref.h:29: undefined reference to « YAML::detail::node_data::mark_defined() » 
/usr/include/yaml-cpp/node/detail/node_ref.h:29: undefined reference to « YAML::detail::node_data::mark_defined() » 
/usr/include/yaml-cpp/node/detail/node_ref.h:29: undefined reference to « YAML::detail::node_data::mark_defined() » 
/usr/include/yaml-cpp/node/detail/node_ref.h:29: undefined reference to « YAML::detail::node_data::mark_defined() » 
/usr/include/yaml-cpp/node/detail/node_ref.h:29: undefined reference to « YAML::detail::node_data::mark_defined() » 
./Debug/loader.cpp.o: in function « YAML::detail::node_ref::set_null() »: 
/usr/include/yaml-cpp/node/detail/node_ref.h:34: undefined reference to « YAML::detail::node_data::set_null() » 

Loader.cpp

#include <yaml-cpp/yaml.h> 
#include <fstream> 
#include <iostream> 
#include "loader.hpp" 

namespace Mercenaries 
{ 
    Loader::Loader(std::string config_path, std::vector<std::string> fields_list) : m_config_path(config_path), m_fields_list(fields_list) 
    { 
     m_config_file = YAML::LoadFile(m_config_path); 
    } 

    void Loader::parse_file() 
    { 
     // if the file exist 
     if(!m_config_file.IsNull()) 
     { 
      //the first node is the file 
      YAML::Node current_node = m_config_file; 

      // we get the next node 
      YAML::Node node = move_into_node(current_node, "Grid"); 

      // get the data inside the node 
      auto data = node; 
     } 
     else 
     { 
      // the file doesn't exist 
      std::cout << "Failed to load " << m_config_path << " settings file."; 
     } 
    } 

    YAML::Node Loader::move_into_node(YAML::Node current_node, std::string next_node) 
    { 
     YAML::Node node; 

     // we verify that the node exist 
     if(current_node[next_node]) 
     { 
      node = current_node[next_node]; // get the value 
     } 
     else 
     { 
      // the node doesn't exist in the yaml file 
      std::cout << next_node << " node is not found in " << m_config_path << " goal file"; 
     } 

     return(node); 
    } 
} 

Loader.hpp

#ifndef DEF_LOADER 
#define DEF_LOADER 

#include <yaml-cpp/yaml.h> 

namespace Mercenaries 
{ 
    class Loader 
    { 
     public: 
      Loader(std::string config_path, std::vector<std::string> fields_list); 
      void parse_file(); 
      YAML::Node move_into_node(YAML::Node current_node, std::string next_node); 

     private: 
      std::string m_config_path; 
      YAML::Node m_config_file; 
      std::vector<std::string> m_fields_list; 
    }; 
} 

#endif 

Pensez-vous que c'est une question yaml-cpp?

Y at-il une erreur dans mon code qui le rend bug?

Dois-je le signaler si c'est un problème de yaml?

Répondre

2

Il semblerait que vous ne liiez pas à yaml-cpp; vous devez ajouter l'argument -lyaml-cpp (à la commande qui commence /usr/bin/g++ -o ./Debug/MyProject).

+0

Merci ça a marché! – Waltharnack