C++ include libraries

C++ include libraries

本文关键字:libraries include C++      更新时间:2023-10-16

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

所以我在做

#include "someheader.h"

但它给了我

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

我想你可以说这是一个全系统的图书馆。我正在运行arch-linux,并从repo安装了库,我认为.h文件在/usr/include中。

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

做这件事的"正确"方法是什么?

编辑:我说.h文件在/usr/include中是不对的,我的意思是库文件夹在那里因此,埃米尔·科米尔的回答在一定程度上起了作用。现在的问题是头文件中有一些include,从我试图访问的方法来看,这些include似乎没有发生它给了我错误的

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

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

#include <library_name/someheader.h>

并使用进行编译

g++ code.cpp -llibrary_name

有时,库的头文件安装在/usr/include/library_name中,因此必须包含以下内容:

#include <library_name/someheader.h>

使用文件管理器(或控制台命令)在系统中定位头文件,并查看是否应在头文件名前面加上目录名。


您得到的undefined reference错误是链接器错误。你得到这个错误是因为你没有在libsynaptics中与你的程序一起链接,因此链接器找不到";实现";你正在使用的libsynaptics函数。

如果使用GCC从命令行进行编译,则必须添加-lsynaptics选项以链接到libsynaptics库中。如果你使用的是IDE,你必须找到一个可以指定库链接和添加synaptics的地方。如果使用的是makefile,则必须修改链接器标志列表,以便添加-lsynaptics

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

请参阅本教程,了解如何使用GCC链接到库。

系统位置的头文件使用#include <someheader.h>

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

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

g++ -Wall youprogram.cpp -lname_of_library

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

快速修复方法是使用:

#include <someheader.h>

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

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