我使用的是别人写的一个库,它是基于C语言的,用于C++的使用,-I think-。头文件或源文件中使用的所有包含项都是<>形式,而不是"“形式,即使它们不是标准库文件。我的编译器无法识别它们,并返回错误"file not found“
该问题的一个示例位于以下标头中:
#ifndef _ga_ga_h_
#define _ga_ga_h_
// Make sure that we get the configuration into each of the galib components
// that will be used.
#include
// These are the headers for all of the genetic algorithm classes.
#include
#include
#include
#include
#include
// Here we include the headers for all of the various genome types.
#include
#include
#include
#include我使用#include "ga.h“在我的程序中包含了这个头文件,但是很难在库中的每个头文件/源文件中更改它。
有没有办法让编译器像"“一样使用<>?我尝试从项目属性(我使用的是Visual Studio)中添加到“Many directories”的路径,许多inclusions的错误消失了,但大约有30个仍然存在。奇怪的是,它们在一个名为"c1xx“的文件中,而我没有这个文件!
谢谢
发布于 2017-01-01 20:58:21
在某种程度上,<>用于“系统”头文件,通常位于/usr/include (在类Unix系统上)这样的位置,而"“用于本地头文件。在编译代码时,您可以指定包含头文件的其他目录的位置,例如,在使用GCC时使用-I选项。有关所需设置的信息,请查看编译器文档
因此,例如在Linux和GCC上,如果你的"ga“目录在/usr/local/include/ga中,你可以使用cc -I /usr/local/include。
发布于 2021-02-24 18:15:56
这看起来确实像是告诉编译器在哪里查找包含的头文件的问题。正如在其他答案中所提到的,当您执行#include,header.h必须位于其中一个包含搜索路径中-要么是系统包含的路径,要么是告诉编译器查找标头的其他路径。在Linux/g++中(正如这里的其他答案中提到的),您可以通过将附加的搜索路径传递到-I旗帜。编译命令如下所示:
g++ -I/additional/header/search/path -o a.out your_file.cpp
由于您使用的是visual studio和MSVC编译器,因此等效的/I标志,编译命令将如下所示:
CL /I\additional\header\path your_file.cpp
我假设您使用的是Visual Studio --您也可以从项目属性中进行配置。转到Configuration Properties > C/C++ > General和修改Additional Include Directories..。有关详细信息,请参阅以下内容:
发布于 2021-02-26 05:16:49
首先是关于两者之间的区别
还有。标准(C和C++)仅指定
#include 包括一个名为 header 的标题,并且
#include "file"包含一个名为 file 的源文件,如果没有找到,则包含一个名为 file 的头文件。
什么是标头以及它们与源文件的区别是由实现决定的。实际上,它们也是文件。所以#include 正在某些地方寻找文件, #include "file" 正在其他一些地方寻找文件,如果没有在与 #include 相同的地方找到。
AFAIK 所有编译器
能够在包含 include 指令的文件的目录中搜索源文件
能够在默认搜索路径之前获得目录列表以搜索标题。
ISTR 指出,Visual C++ 也在间接包含它的文件目录中搜索源文件。 (我目前无法确认我的记忆是否良好;这种行为是 AFAIK 无法用其他编译器实现的,所以我从来没有依赖它,而且——幸运的是?——它从来没有导致我的程序出现不同的行为)。
显然,这种行为或多或少是可定制的。例如,使用 g++ 可以:
禁用在包含包含指令的文件的目录中搜索源文件(使用 -I-,请注意 -I- 自 gcc 4.0 -- 2005 年以来已被弃用 -- 当 -iquote 被引入并且没有非 -不推荐使用的方法来实现这一点)
添加一个目录列表来搜索源文件而不是标题(使用 -iquote 并且它也是 -I- 的效果)
在默认目录列表之后给出一个目录列表来搜索标题(使用 -idirafter)
给出一个目录列表来搜索经过特殊处理的头文件(使用 -isystem;对于那些有助于使用“将警告视为错误”标志的文件中的构造给出较少的警告,它们不被视为依赖项 - MM 和 -MMD 这通常是一个麻烦)
现在解决你的问题。该库明显设计为通过将包含目录 ga 的目录添加到包含路径来使用。这应该足够了,因为我不知道任何编译器会根据包含标头的文件的方式修改其标头搜索路径。
请注意,c1xx 可能是编译器可执行文件的名称,而不是试图包含另一个文件的文件的名称(同样,我现在无法确保是这种情况,但与 cc1plus 相比,它是编译器的名称GCC -- g++ 是一个驱动处理几个事情并执行 cc1plus 来处理 C++ 代码的编译)
https://stackoverflow.com/questions/41415601
复制相似问题