[英]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.