Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;包括图书馆_C++_Header_Archlinux - Fatal编程技术网

C++ C++;包括图书馆

C++ C++;包括图书馆,c++,header,archlinux,C++,Header,Archlinux,好吧,已经有一段时间了,我对#includes有问题 我在做什么 #include "someheader.h" 但它给了我 fatal error: someheader.h: No such file or directory 我想你可以说这是一个全系统的图书馆。 我运行的是ArchLinux,我从repo安装了库,我认为.h文件位于/usr/include中 我可以把所有的头文件复制到我的代码所在的文件夹中,但那是一种黑客行为 “正确”的方法是什么 编辑:我说.h文件在/usr/inc

好吧,已经有一段时间了,我对#includes有问题

我在做什么

#include "someheader.h"
但它给了我

fatal error: someheader.h: No such file or directory
我想你可以说这是一个全系统的图书馆。 我运行的是ArchLinux,我从repo安装了库,我认为.h文件位于/usr/include中

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

“正确”的方法是什么

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

undefined reference to Namespace::Class::method()
编辑: 那么最后的答案是:

#include <library_name/someheader.h>
对于系统位置中的头文件,可以使用
#include

#include“someheader.h”
将尝试将文件someheader.h包含在.c文件的目录中

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

g++ -Wall youprogram.cpp -lname_of_library

不这样做是“undefined reference..”链接器错误的原因。

快速修复方法是使用:

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


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

有时,库的头文件安装在
/u中sr/include/library\u name
,因此您必须包括以下内容:

#include <library_name/someheader.h>
#包括
使用文件管理器(或控制台命令)在系统上定位头文件,并查看是否应在头文件名前加上目录名


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

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

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


有关使用GCC链接到库的内容,请参阅。

如果替换
#包括“someheader.h”,会发生什么情况
#include
?include是否也会失败?看一看:是的,我知道,但是#include也不起作用,所以我不确定有问题的库是什么?不,那不起作用我试过了,除非我在执行
g++code.cpp时出错。它会抛出错误首先验证文件是否存在于/usr/inc中请记住/并且您没有拼写错误。然后将失败的代码复制粘贴到您的问题中,以便我们进行验证。或者列出您安装的软件包的文件。也许它将标题安装在/usr/include或其他位置的子目录中。好了!关于-lname_of_库的部分是关键,还有#include我选择Emile作为标题回答,因为他解决了原来的答案。哈哈,这更像是这样。所以错误消失了,但是我知道我被另一个问题困扰着,我很确定是同样的问题,看我的编辑在这个问题(当我打字它)是的,我得到它,已经有一段时间以来直上C++,谢谢帮助。
#include <library_name/someheader.h>