首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未定义参考yaml-cpp

未定义参考yaml-cpp
EN

Stack Overflow用户
提问于 2015-03-22 16:24:45
回答 3查看 3.1K关注 0票数 3

我在Manjaro上使用gcc和codelite编译我的代码。这是一个在C++中使用sfml和yaml的项目.

GCC版本为4.9.2 (20150304)

GCC编译器标志为-pg;-g;-O0;-O2;-Wall;-std=c++14。

我的yaml-cpp版本是0.5.1-1

当我编译时,我有以下错误:

代码语言:javascript
复制
/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

代码语言:javascript
复制
#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

代码语言:javascript
复制
#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

你认为这是yaml-cpp的问题吗?

我的代码中是否有错误使其出错?

如果是yaml问题我应该报告吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-03-22 17:51:57

看起来您没有链接到yaml-cpp;您需要添加参数-lyaml-cpp (添加到以/usr/bin/g++ -o ./Debug/MyProject开头的命令中)。

票数 2
EN

Stack Overflow用户

发布于 2020-10-29 23:38:40

如果你在考虑一个CMakeLists.txt项目.

代码语言:javascript
复制
cmake_minimum_required(VERSION 3.10)
project(Test_yaml_cpp)

set(CMAKE_CXX_STANDARD 14)
# In case of third party library
#find_package(yaml-cpp PATHS ./thirparty/yaml-cpp/build)

# In case of installed library
find_package(yaml-cpp)
add_executable(yaml_exec main.cpp)
target_link_libraries(yaml_exec yaml-cpp)

对于第三方方法,yaml-cpp库应该已经构建在build文件夹中,并由它们的文档推荐。

票数 0
EN

Stack Overflow用户

发布于 2020-01-07 08:10:16

尝试将以下内容添加到cmakelist

代码语言:javascript
复制
find_package(PkgConfig REQUIRED)
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29196832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档