繁体   English   中英

C++ 包含库

[英]C++ include libraries

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

所以我在做

#include "someheader.h"

但它给了我

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

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

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

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

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

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

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

#include <library_name/someheader.h>

并编译

g++ code.cpp -llibrary_name

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

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

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

g++ -Wall youprogram.cpp -lname_of_library

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

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

#include <library_name/someheader.h>

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


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

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

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

请参阅有关使用 GCC 链接到库的 教程

快速修复是使用:

#include <someheader.h>

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM