C++ include libraries
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中是不对的,我的意思是库文件夹在那里因此,埃米尔·科米尔的回答在一定程度上起了作用。现在的问题是头文件中有一些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
)的方式来设置构建系统。这样,您还可以通过在构建系统中配置不同的版本来进行构建。如果库不仅仅是头,您还必须将其添加到链接器依赖项中。如何在构建系统中实现这一点,最好通过查阅其文档来了解。
- 既然存在危险,为什么项目要使用-I include开关
- 有充分的理由在h文件中使用include保护而不是cpp文件吗
- 如何将更多文件夹添加到c++include路径
- 什么是"#include <boost/functional/hash.hpp> "?
- C++ MFC Libraries in Travis CI
- 对于MacOS上的G++,如何添加默认的include目录/usr/local/include和默认的库搜索路径/usr
- C++包含来自 #include "DevEngine/Core.h" 的错误
- <filesystem> 在 clang 6 和 10 上 #include 错误
- 在 void 函数中使用 #include 变量C++
- N-API include an .so or dll
- 允许哪些令牌作为 #include 的参数?
- GCC 包含标头(使用"-include")CMake 未检测到的更改
- WebAssembly include OpenCV
- 如何在 c++ 中正确指定 #include 路径以使程序可移植
- 修改生成文件以简化框架 #include 路径
- VS2015/VC++ 在新类模板中禁用默认 #include "stdafx.h"
- macOS 致命错误:sys/_types/_int8_t.h:没有此类文件或目录 #include < sys/_types/_int8_t.h>
- #include < conio.h> 和 getch() 方法之间的关系是什么?
- 如何将构建的C++库安装到 /usr/include?
- C++ include libraries