【发布时间】:2021-11-30 17:28:15
【问题描述】:
我有一个 yaml-cpp 库提供的头文件,yaml.h
yaml.h:
#include "yaml-cpp/parser.h"
#include "yaml-cpp/emitter.h"
#include "yaml-cpp/emitterstyle.h"
#include "yaml-cpp/stlemitter.h"
#include "yaml-cpp/exceptions.h"
#include "yaml-cpp/node/node.h"
#include "yaml-cpp/node/impl.h"
#include "yaml-cpp/node/convert.h"
#include "yaml-cpp/node/iterator.h"
#include "yaml-cpp/node/detail/impl.h"
#include "yaml-cpp/node/parse.h"
#include "yaml-cpp/node/emit.h"
main.cpp
#include "./lib/yaml-cpp/include/yaml.h"
int main()
{
YAML::Node config = YAML::LoadFile("config.yaml");
return 0;
}
所有头文件都在同一目录(/home/user/application/libs/yaml-cpp/include),但编译器找不到parser.h 和所有其他包含。为什么会这样,我该如何解决?
我尝试过使用g++ -I/home/user/application/libs/yaml-cpp/include main.cpp,但没有成功。
我在 linux 环境中。当头文件保存在 /usr/lib64 中时,一切正常,但我不能为这个项目这样做。
【问题讨论】:
-
头文件的路径是否以“/”开头?你的伪代码看起来像这样。您是否在这样的路径指示绝对路径的平台上?这是故意的吗?还是您想要一个以“path/to...”开头的相对路径?
-
@Yunnosch 我已经用更多信息更新了这个问题。标头由第三方库提供,并且在其标头代码中,它们具有其他头文件的硬编码路径。
-
您的伪代码可能会遗漏相关信息。 “其他头文件的硬编码路径”是绝对的吗?它是否以“/lib”结尾?考虑通过创建具有精确但非个人信息的minimal reproducible example 来减少“匿名化”。如有必要,重新安装以进行更改个人路径。请edit 收集问题本身中的所有信息,而不是在此处将其拆分为问题正文和 cmets。考虑制作一个具有相同问题但没有库的minimal reproducible example,以简化调试。即模拟类似的库。可能只有标头就足够了。
-
@Yunnosch 我已经更新了这个问题。我认为没有额外信息会更容易理解,但显然不是。如果更新后的问题更清楚,请告诉我
-
您确定标头在“yaml-cpp/include”内并且包含行将它们列为
#include "yaml-cpp/parser.h",即不要在“include”文件夹中查找它们吗?我真的建议使用自己创建的仅标头库创建minimal reproducible example。它可以让您尝试不同的安装文件结构,包括行......它还可以让潜在的回答者更容易重现您的问题。除了制作 MRE 只是让您自己追踪问题的相关细节的好方法之外。