错误 C1083:无法打开包含文件:"FL/Fl.h":没有此类文件或目录

error C1083: Cannot open include file: 'FL/Fl.h': No such file or directory

本文关键字:文件 Fl FL C1083 错误 包含      更新时间:2023-10-16

首先,我还是新手,因此不知道如何格式化代码,所以在这个问题上看起来很整洁,我希望这是可以接受的。我遵循Stroustrup的编程原则和实践。你可能猜到问题是什么…是的,FLTK安装。我仔细地遵循了所有步骤,在VS C++2013中构建了该项目;第1204-1206页。(我已经成功地完成了附录C,必须使用std_lib_facilities.h).

我试图构建以下win32项目,如书中所示:

#include <FL/Fl.h>
#include <FL/Fl_Box.h>
#include <FL/Fl_Window.h>
int main()
{
Fl_Window window(200, 200, "Window title");
Fl_Box box(0, 0, 200, 200, "Hey, I mean, Hello, World!");
window.show();
return Fl::run();
}

在构建解决方案后,我收到一个错误,上面写着:错误1错误C1083:无法打开包含文件:"FL/FL.h":没有这样的文件或目录

我还按照步骤将FLTK lib目录中的一些lib文件复制到c:\users\pablo\datadesk\c++课程文件\visual c++\win32project1\source.cpp中,这是我为visual Studio Express 2013创建的文件。有人能帮我吗?我在哪里可以找到这个丢失的文件?问题可能与FLTK版本在VS 2013中使用有点过时有关吗?(当我编译FLTK库时,我遇到了一些与备份文件有关的错误和一些警告。)我研究了这么长时间。我在这个论坛上发现了一些与此有关的问题,但与上述问题并不完全相关。事先非常感谢。

PS嗯,有一个问题与同样的错误有关。为了回答同一个问题,我采用了一些技巧,但都无济于事。

("对于这些类型的错误,你可以做的一个巧妙的技巧是将光标放在#include语句的文件名中,然后按Ctrl+Shift+G。它将失败,并显示一个显示include路径的消息框。解决方案是,只需右键单击你的项目,转到Properties>C/C++>General并设置,就可以向SDK添加额外的include路径。"附加包含目录".")

显示的另一个建议也不起作用:("确保include目录不是FL目录,而是它的父目录。原因是当你说#include"FL/FL.h"时,你要求编译器进入一个名为FL的文件夹来查找FL.h,该文件夹将位于FL的父目录中。如果你将FL指定为include目录,那么你只需要说#include"FL.h")。

另一个答案根本不是真的(我刚刚编译了一个FLTK程序,所有的头都是#include <FL/xxx.H>形式)。当你下载FLTK时,你会得到一个目录(比如FLTK-1.3.2),它有这样的结构

/fltk-1.3.2/
    FL/
    GL/
    src/
    lib/
    examples/
    + other stuff

子目录FL包含所有的头文件。因此,如果fltk-1.3.2目录位于\foo\,则需要将\foo\fltk--1.3.2\添加到附加的include-headers字段中。请小心,您可能意外地选择了错误的目录(发生这种情况),或者您可能将文件的压缩版本的内容提取到了其本身的嵌套版本中,这意味着您可能有类似\foo\fltk-1.32\fltk-1.3.2\的内容。

如果它找不到标题,那么几乎可以肯定的是,额外的includedirectories字段出现在错误的位置或格式中。点击下拉按钮,点击编辑,手动点击新文件夹按钮并导航到它

接下来你会发现,你必须将链接器指向正确的方向。在上面的默认位置安装库文件(.lib static应该是FLTK的默认值),因此您需要将\foo\FLTK-1.32\lib\添加到配置属性->Linker->General->Additional library directories

然后你需要链接到特定的库。由于链接器现在知道在哪里查找,因此需要指定路径,但只需命名即可。要执行此操作,请转到配置属性->链接器->输入->其他依赖项,单击下拉选项,单击编辑并在单独的行上添加(不含这些逗号)fltkd.lib、fltkformsd.lib、fltkzlib.lib,wsock32.lib

这是因为没有名为#include <FL/Fl.h>的头文件,他们的意思是根据您制作的程序包括#include <FL>#include <FL.h>,但前者很可能是您想要做的,因为它是标准版本。#include <FL.h>是一个旧库,甚至没有包含在标准中。它甚至没有包含在每个平台中。在本例中不应使用.h版本。

其他两个头文件也是如此。

最初的问题是关于Windows的,问题的直接答案是将FL目录上方的目录(注意:大写)添加到Visual Studio设置的include路径中。

由于这是关于窗口的,头文件的拼写可能无关紧要,但OP所示的程序是不可移植的,因为其他系统使用区分大小写的文件系统。为了便于移植,几乎所有的FLTK头文件都必须用大写的"来编写;。H〃;可以在区分大小写的文件系统中找到(也有一些例外)。正确的示例程序——在当前开发版本为FLTK 1.4.0的区分大小写的Linux上测试——应该是:

#include <FL/Fl.H>
#include <FL/Fl_Box.H>
#include <FL/Fl_Window.H>
int main() {
  Fl_Window window(200, 200, "Window title");
  Fl_Box box(0, 0, 200, 200, "Hey, I mean, Hello, World!");
  window.show();
  return Fl::run();
}

请注意,这仍然需要正确的include路径来编译和构建。

这很管用!!!在您自己的Linux/Mac上:下载fltk 1.1.10的源代码,并将其解压到您选择的目录中。你应该能够执行";配置"make";,以及";sudo make install;在/usr/local/lib和/usr/local/include中安装fltk。