6

好的,已经有一段时间了,我在使用#includes 时遇到了问题

所以我在做

#include "someheader.h"

但它给了我

fatal error: someheader.h: No such file or directory

我猜你可以说这是一个系统范围的库。我正在运行 arch linux 并从 repo 安装了库,我认为 .h 文件位于 /usr/include 中。

我可以将所有头文件复制到我的代码所在的文件夹中,但这将是一个 hack。

这样做的“正确”方法是什么?

编辑:我说 .h 文件在 /usr/include 中是不正确的,我的意思是库文件夹在那里所以,Emile Cormier 的回答在一定程度上起作用。现在的问题是头文件中有一些包含,从我尝试访问的方法看来,这些包含没有发生,这给了我错误

undefined reference to Namespace::Class::method()

编辑:好的,所以最终答案是:

#include <library_name/someheader.h>

并编译

g++ code.cpp -llibrary_name
4

3 回答 3

9

您将#include <someheader.h>用于系统位置中的头文件。

#include "someheader.h"会尝试将文件 someheader.h 包含在 .c 文件的目录中。

除了包含头文件外,还需要在库中进行链接,这是通过 -l 参数完成的:

g++ -Wall youprogram.cpp -lname_of_library

不这样做是“未定义的引用..”链接器错误的原因。

于 2012-03-18T01:26:29.023 回答
9

有时,库的头文件安装在 中/usr/include/library_name,因此您必须像这样包含:

#include <library_name/someheader.h>

使用文件管理器(或控制台命令)在系统上找到头文件,看看是否应该在头文件名前加上目录名。


undefined reference您收到的错误是链接器错误。您收到此错误是因为您没有将 libsynaptics 与您的程序一起链接,因此链接器无法找到您正在使用的 libsynaptics 函数的“实现”。

如果您使用 GCC 从命令行编译,则必须-lsynaptics在 libsynaptics 库中添加链接选项。如果您使用的是 IDE,则必须找到可以指定要链接的库和添加突触的位置。如果您使用的是 makefile,则必须修改链接器标志列表,以便将-lsynaptics.

-L <path_to_library>需要添加搜索路径的标志,以便链接器可以找到库,除非它安装在标准链接器搜索路径之一中。

请参阅本教程以使用 GCC 链接到库。

于 2012-03-18T01:32:35.603 回答
1

快速解决方法是使用:

#include <someheader.h>

假设它someheader.h在标准包含位置(要找到它,请使用locate someheader.hshell 中的命令。如果在/usr/include其中,则在标准位置。如果在子目录中,则/usr/include只需将目录的一部分添加/usr/include#include指令(例如#include <fancy_lib/someheader.h>

然而,这只是故事的一半。您还需要以一种定位给定库并将其包含路径(存储它的头文件的路径)添加到编译器命令的方式来设置构建系统(例如gcc-I/path/to/header。这样,您还可以通过在构建系统中配置不同的版本来构建它们。如果库不是仅头文件,您还必须将其添加到链接器依赖项中。最好通过查阅其文档来了解如何在您的构建系统中实现这一点。

于 2012-03-18T01:32:03.690 回答