C++ C++;如何创建';全球';图书馆

C++ C++;如何创建';全球';图书馆,c++,C++,我正在做一个项目,它的行是:#include 现在我可以简单地下载和制作。但我如何使它成为一个“全球”图书馆 我曾尝试将其添加到$PKG\u CONFIG\u路径,但似乎不起作用。我经常会遇到这样的错误:main.c:30:10:致命错误:“fftw3.h”文件找不到 所以我的问题是:我需要在哪里创建fftw库(或任何相关的库)以使其全球可访问 注意:我可能会错误地使用术语“全局”,在这种情况下,请让我知道正确的术语是什么 更新:命令是: gcc -Wall -march=native -O3

我正在做一个项目,它的行是:
#include

现在我可以简单地下载和制作。但我如何使它成为一个“全球”图书馆

我曾尝试将其添加到
$PKG\u CONFIG\u路径
,但似乎不起作用。我经常会遇到这样的错误:
main.c:30:10:致命错误:“fftw3.h”文件找不到

所以我的问题是:我需要在哪里创建fftw库(或任何相关的库)以使其全球可访问

注意:我可能会错误地使用术语“全局”,在这种情况下,请让我知道正确的术语是什么

更新:命令是:

gcc -Wall -march=native -O3 -ffast-math `pkg-config --cflags fftw3` `pkg-config --cflags sndfile` -c -o main.o main.c
main.c
包含行

#include <fftw3.h>
#包括

我认为没有你所说的确切答案——没有“全局”库,因为“fftw3.h”是一个头文件

这里有三件事: 1)找到头文件的位置 2)找到静态(或存根/导入)库的位置 3)您可以在其中找到动态库(在运行时)

对于1),答案是“取决于构建工具的配置”。 第二条也是如此。对于3,它通常“在路径中,与可执行文件在同一文件夹中,在当前目录中,或在特定于平台的目录中”。对于Windows、Linux或其他平台,情况可能略有不同

简而言之,您需要为它配置构建工具

编辑: 既然我们知道了您的工具是什么,我建议您阅读这个简短的页面,解释GCC如何查找标题(您的.h文件)。您可以将头文件放在其中一个搜索路径(sloppy!),也可以将“额外”头文件放在您选择的目录中,并使用“-I”参数将其添加到编译命令中


我认为没有你所说的确切答案——没有“全局”库,因为“fftw3.h”是一个头文件

这里有三件事: 1)找到头文件的位置 2)找到静态(或存根/导入)库的位置 3)您可以在其中找到动态库(在运行时)

对于1),答案是“取决于构建工具的配置”。 第二条也是如此。对于3,它通常“在路径中,与可执行文件在同一文件夹中,在当前目录中,或在特定于平台的目录中”。对于Windows、Linux或其他平台,情况可能略有不同

简而言之,您需要为它配置构建工具

编辑: 既然我们知道了您的工具是什么,我建议您阅读这个简短的页面,解释GCC如何查找标题(您的.h文件)。您可以将头文件放在其中一个搜索路径(sloppy!),也可以将“额外”头文件放在您选择的目录中,并使用“-I”参数将其添加到编译命令中


使用
包含文件通常是不好的做法,它增加了同名文件变得模棱两可的风险(尤其是在大型项目上)

您可以通过使用
-I
编译器选项指定其他全局包含目录来实现这一点。然而,并没有最好的方法来实现这一点(这取决于项目的组织方式和规模)

按绝对路径包含:

#include <file>
#include <somepath/file2>
#include "../file"
#include "../somepath2/file2"
优点:

#include <file>
#include <somepath/file2>
#include "../file"
#include "../somepath2/file2"
  • 不可能发生名称冲突,给定任何相对路径,仅存在1个文件
缺点:

#include <file>
#include <somepath/file2>
#include "../file"
#include "../somepath2/file2"
  • 您不能移动文件,否则需要更改相对路径(不过IDE的重构工具可能会有帮助)
当然,我更喜欢对标准库内容使用绝对路径,并最终很少使用其他依赖项,否则我只使用相对路径。您应该注意,当编译器搜索全局include文件时,它将搜索所有提供的
-I
目录,因此如果您滥用该功能,可能会增加编译时间

当然,即使在使用globalinclude时,我也更喜欢只添加一个额外的目录并对其进行组织,这样编译器就不必猜测路径

Include
  +FolderNameSpace1
  +FolderNameSpace2
因此,我只需在包含时添加名称空间

#include <FolderNameSpace1/File1>
你只需要做:

gcc -Wall -march=native -O3 -ffast-math -I../FFWT/includes c -o main.o main.c
(我假设您是从“您的文件夹”中调用GCC的)

如何添加其他全局包含目录:


允许使用
包含文件通常是不好的做法,它增加了同名文件变得模棱两可的风险(尤其是在大型项目上)

您可以通过使用
-I
编译器选项指定其他全局包含目录来实现这一点。然而,并没有最好的方法来实现这一点(这取决于项目的组织方式和规模)

按绝对路径包含:

#include <file>
#include <somepath/file2>
#include "../file"
#include "../somepath2/file2"
优点:

#include <file>
#include <somepath/file2>
#include "../file"
#include "../somepath2/file2"
  • 不可能发生名称冲突,给定任何相对路径,仅存在1个文件
缺点:

#include <file>
#include <somepath/file2>
#include "../file"
#include "../somepath2/file2"
  • 您不能移动文件,否则需要更改相对路径(不过IDE的重构工具可能会有帮助)
当然,我更喜欢对标准库内容使用绝对路径,并最终很少使用其他依赖项,否则我只使用相对路径。您应该注意,当编译器搜索全局include文件时,它将搜索所有提供的
-I
目录,因此如果您滥用该功能,可能会增加编译时间

当然,即使在使用globalinclude时,我也更喜欢只添加一个额外的目录并对其进行组织,这样编译器就不必猜测路径

Include
  +FolderNameSpace1
  +FolderNameSpace2
因此,我只需在包含时添加名称空间

#include <FolderNameSpace1/File1>
你只需要做:

gcc -Wall -march=native -O3 -ffast-math -I../FFWT/includes c -o main.o main.c
(我假设您是从“您的文件夹”中调用GCC的)

如何添加其他全局include directo