错误C1083: 无法打开包括文件: 'FL/Fl.h': 没有那个文件或目录。

7
首先,我还是个新手,不知道如何格式化代码使其在问题中看起来整洁,希望这是可以接受的。我正在遵循Stroustrup的编程原则和实践。你可能猜到问题是什么了... 是FLTK安装。我仔细按照1204-1206页的步骤在VS C++ 2013中构建项目(附录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 error C1083: 无法打开包括文件:“FL/Fl.h”:没有那个文件或目录
我还按照步骤从FLTK库目录中复制了一些lib文件到c:\users\pablo\desktop\c++ course files\visual c++\win32project1\source.cpp,这是我为Visual Studio Express 2013创建的文件。 有人能帮帮我吗?我在哪里找到这个缺失的文件?问题可能与FLTK版本有关,在VS 2013中使用有点过时吗?(当我编译FLTK库时,我得到了一些关于备份文件和一些警告的错误。) 我已经进行了长时间而艰苦的研究。我在这个论坛中找到了一些与此有关的问题,但并不完全涉及上述问题。非常感谢您的预先帮助。
PS嗯,有一个问题涉及相同的错误。我已经遵循了其中一些技巧作为答案,但没有用处。
(“对于这些类型的错误,您可以做一个巧妙的技巧,就是将光标放到#include语句的文件名中,然后按Ctrl + Shift + G。它会失败并显示一个消息框,显示包括路径。解决方案只是通过右键单击项目并转到“属性> C / C ++>常规”,并设置“附加包括目录”来添加其他包括路径到SDK中。”)
另一个建议也不起作用:“(确保包含目录不是FL目录,而是其父目录。原因是当您说#include” FL / Fl.h“时,您要求编译器进入名为FL的文件夹中查找Fl.h,该文件将驻留在FL的父级中。如果指定FL为包含目录,则只需要说#include” Fl.h“)。”
4个回答

3

另一个答案完全不正确(我刚刚用所有标题为#include <FL/xxx.H>的形式编译了一个FLTK程序)。当您下载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\添加到附加包含目录字段中。请注意,您可能会选择错误的目录(这种情况很常见),或者您可能会将压缩文件的内容提取到嵌套版本的自身中,这意味着您可能会有类似于\foo\fltk-1.3.2\fltk-1.3.2\的文件夹,所以请仔细查看。
如果找不到头文件,则几乎可以确定是因为附加包含目录字段没有以正确的格式或位置查找。点击下拉按钮,然后单击编辑并手动单击新文件夹按钮并导航到该文件夹。
接下来需要做的是将链接器指向正确的方向。在上述示例中,库文件的默认安装位置(FLTK应使用.lib静态库)应为\foo\fltk-1.3.2\lib\,因此需要将其添加到配置属性->链接器->常规->附加库目录 中。
然后,您需要连接到特定的库。由于链接器现在知道在哪里查找库文件,所以您无需指定路径,只需命名即可。要执行此操作,请转到配置属性->链接器->输入->附加依赖项,在下拉选项中单击编辑,然后添加fltkd.lib、fltkformsd.lib、fltkzlib.lib和wsock32.lib(每个库名应作为单独的行,不要在其中添加逗号)。

好的,谢谢大家的回答。我认为我所做的事情有根本性的问题,因为尽管尝试了所有你们的建议,FLTK仍然不想合作。我可能需要删除FLTK文件并重新安装它们。我认为这可能与我安装的版本1.1.10有关,因为它显示一个.zip文件。我将安装1.3.2 .gz并使用7-zip解压缩它。 - Pablo
尝试按照一些在线指南操作,例如:http://www.c-jump.com/bcc/common/Talk2/Cxx/FltkInstallVC/FltkInstallVC.html。你可以按照其明确的指示将 FLGL 目录复制到 VS 包含文件夹以及.lib 文件复制到 lib 文件夹中,这意味着你只需要在“输入”字段中添加库文件。或者你可以按照我说的做法,不复制它们,并告诉编译器去哪里查找它们。注意:当你编译/安装 FLTK 时,如果在调试模式下它会生成 fltkd.lib 文件,在发布模式下会生成 fltk.lib 文件。检查一下你所做的是哪种模式,然后进行适当的链接。 - user3353819
在Windows下构建FLTK,进入IDE目录,使用vc.net解决方案。可能需要转换为VS2013。不要使用vc6解决方案。 - cup

1
这是因为没有名为#include <FL/Fl.h>的头文件。这意味着,根据您制作的程序,应包括#include <FL>#include <FL.h>其中之一。但前者是标准版本,最可能是您想要的。 #include <FL.h>是一个旧库,甚至不包含在标准库中。它也不在每个平台上都包含。在此示例中,您不应使用.h版本。
其他两个头文件也是如此。

嗯,仍然在苦苦挣扎;没有任何进展。也许这与环境变量和路径有关,因为我之前安装了Netbeans并使用MingW编译器来使用该IDE。虽然我不确定是否应该更改路径。非常令人沮丧。仍然出现相同的错误。 - Pablo
这个答案是不正确的。FL/Fl.h 是这样写的,因为它期望你在你的 include 目录中维护这个结构。你应该将 GL 目录与它一起保留,因为 FL 目录中的一些头文件会寻找 GL 目录中的其他包含文件,而它期望那里有这些文件。 - user3353819
关键在于将FL目录的父目录添加到包含头文件路径中,无论在MS Visual Studio中它被称为什么(也许是“附加包含头文件路径”,我不确定)。 - Albrecht Schlosser

0

原始问题是关于Windows的,对问题的直接回答是将FL目录(注意:大写)上面的目录添加到Visual Studio设置的包含路径中。

由于这是关于Windows的,头文件的拼写可能并不重要,但是像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();
}

请注意,这仍需要正确的包含路径来进行编译和构建。

-1

这个可行!!! 在你自己的Linux/Mac上:下载fltk 1.1.10的源代码并将其解压缩到您选择的目录中。您应该能够执行“configure”,“make”和“sudo make install”以将fltk安装在/usr/local/lib和/usr/local/include中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接