yaml-cpp 未定义的 CMake 引用

Posted

技术标签:

【中文标题】yaml-cpp 未定义的 CMake 引用【英文标题】:yaml-cpp undefined reference with CMake 【发布时间】:2017-01-30 07:14:27 【问题描述】:

我正在尝试在使用 cmake 和 gcc(使用 Ubuntu)的设置中将 YAML 数据加载到 c++,但出现无法解决的错误。

到目前为止,我已经完成了以下工作:

克隆yaml-cpp repo,创建build,使用cmake ..make 构建库并将文件从Downloads/yaml-cpp/build/include/yaml-cpp/ 复制到myproject/include/yaml-cpp/

此外,我有一个重现错误的最小工作示例,如下所示:

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;

我还有一个小 yaml 文件 (test.yaml),其中包含:

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

但是,如果我尝试编译项目,则会收到错误消息

/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&)' ...

我猜这个项目没有正确找到 yaml-cpp 库。但我无法解决这个问题。

【问题讨论】:

【参考方案1】:

线

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

将尝试仅使用该头文件创建一个库,该头文件不会包含任何构成 yaml-cpp 的符号。您需要构建库并安装它。

【讨论】:

这为我指明了正确的方向。我跑了make 而不是make install 对于遇到同样问题的人,在 make install 之后,您还必须使用 target_link_libraries(YAML_TEST yaml-cpp) 在 cmake 中链接 yaml-cpp

以上是关于yaml-cpp 未定义的 CMake 引用的主要内容,如果未能解决你的问题,请参考以下文章

yaml-cpp 编译错误:“未定义对 YAML::LoadFile 的引用”

CMake:未定义的引用

使用 CMake 对 SDL 的未定义引用

Cmake:对包含方法的未定义引用

使用CMAKE生成makefile后未定义的引用

使用 CMake 使用 Network 构建 Qt 项目会导致未定义的引用