C ++包找不到包

时间:2018-03-11 22:46:48

标签: c++

在我开始之前,请耐心等待我,我对cpp很新,没有接受过正式培训,这个问题可能已经被问过并已经回答了,但我不知道该怎么称呼。

所以我有一个cpp程序,我想在这里使用这个开源google sling包。我的google sling包与main.cpp程序在同一个目录中,我可以包含一个带有相对路径的头文件该程序,但该标头(A)调用包中的其他标头(B :),并且这些标头(B :)的相对路径与该标头(A)文件无关。这是错误堆栈:

name@name-ThinkCentre-M83:~/Desktop/c++coding_projects/test_project$ g++ -Isling main.cpp
In file included from main.cpp:7:0:
sling/frame/object.h:25:10: fatal error: sling/base/logging.h: No such file or directory
 #include "sling/base/logging.h"
          ^~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
name@name-ThinkCentre-M83:~/Desktop/c++coding_projects/test_project$ ls
bin       obj    test_project.cbp     test_project.layout
main.cpp  sling  test_project.depend  text_testfiles
name@name-ThinkCentre-M83:~/Desktop/c++coding_projects/test_project$ vim main.cpp 
name@name-ThinkCentre-M83:~/Desktop/c++coding_projects/test_project$ cd sling/base
name@name-ThinkCentre-M83:~/Desktop/c++coding_projects/test_project/sling/base$ ls
bitcast.h  flags.cc  libinit.cc  port.h       status.cc    types.h
BUILD      flags.h   logging.cc  registry.cc  status.h
clock.cc   init.cc   logging.h   registry.h   strtoint.cc
clock.h    init.h    macros.h    slice.h      strtoint.h

所以sling/base/logging.h实际上存在,但是因为它是从sling/frame/object.h调用的,所以正确的相对路径是../base/logging.h(至少我的有限知识告诉我)。我想我必须设置它,以便它是我的cpp编译器搜索依赖关系的全局路径的一部分。无论哪种方式,我都做了一些非常错误的事情。

我正在寻找半快速解决方案,但我也希望将来避免这种情况,因此非常感谢您提供相应信息的链接。

编辑: 也试过同样的错误: g++ -I.sling main.cpp g++ -Itest_project main.cpp g++ -isystem sling main.cpp g++ -iwithprefixbefore "/home/.../test_project/" main.cpp其中......是从家到我的测试项目的路径

1 个答案:

答案 0 :(得分:0)

谢谢melpomene,正确的答案是g++ -I. main.cpp。案件结案。

感谢Jerry Jeremiah对此信息的评论:

#include <x>说&#34;包含来自包含路径的文件&#34;并且#include "x"说&#34;包括当前目录中的文件&#34;

因此,我的程序调用了头文件&#34; sling / base / logger.h&#34;来自目录&#34; sling / frame /&#34; (这是最初被称为&#34; sling / frame / object.h&#34;生活的地方)并且由于显而易见的原因无法在那里找到它。