I'm on Manjaro Linux using gcc and codelite to compile my code. It's a project with sfml and yaml-cpp in C++.
My GCC version is 4.9.2 (20150304)
GCC compiler flags are -pg;-g;-O0;-O2;-Wall;-std=c++14
My yaml-cpp version is 0.5.1-1
When I compile I have the followings errors:
/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
Do you think that it's an yaml-cpp issue ?
Is there an error in my code that make it bug ?
Should I report it if it's a yaml issue ?
It looks like you're not linking to yaml-cpp; you need to add the argument -lyaml-cpp
(to the command that begins /usr/bin/g++ -o ./Debug/MyProject
).