如何在C ++ Windows中包含第三方库?

时间:2019-06-07 05:46:23

标签: c++ windows mingw

我的下载文件夹中有boost库。当我尝试包含特定文件时。它抛出错误。下面是我执行的代码和步骤。

\ main.cpp

#include "type_index.hpp"

int main(){
//some code
return 0;
}

我打开命令提示符并运行以下命令

g++ -IC:\Users\Owner\Downloads\boost_1_70_0\boost -o main main.cpp

我在命令提示符下出现以下错误

In file included from main.cpp:2:0:
C:\Users\Owner\Downloads\boost_1_70_0\boost/type_index.hpp:17:28: fatal error: boost/config.hpp: No such file or directory
 #include <boost/config.hpp>
                            ^
compilation terminated.

如何运行以上文件?我是否必须将boost目录的位置从下载文件夹更改为mingw目录中的某些位置?

添加目录图片: enter image description here

1 个答案:

答案 0 :(得分:2)

假设boost已在系统上正确配置并构建,则boost包含root的集线器将位于一个位置。例如:如果您在c:\Stuff\boost_1_70_0中下载并构建了boost,那么在该文件夹内将是boost包含集c:\Stuff\boost_1_70_0\boost的中心,其中包含所有boost标题。

通过修改包含路径以提供对boost包含中心的访问来引用

boost; ,以提供对中心中 顶部标题的访问。与openssl相似,boost前言的所有标头都包含在其 own 标头中,并带有boost/。 boost的使用者应该做同样的事情,因此,include路径必须包含可以找到boost/集线器的文件夹。它应该包括boost/集线器本身作为路径的一部分。

例如:这是正确的

g++ -Ic:\Stuff\boost_1_70_0 -o main main.cpp

另一方面,这是错误的:

g++ -Ic:\Stuff\boost_1_70_0\boost -o main main.cpp

对于前者,当代码包括:

#include <boost/asio.hpp>

搜索包含路径,并找到文件。此外,在该标头中,当编译器看到以下内容时:

#include <boost/asio/associated_allocator.hpp>

它仍然可以正确解决,因为将“内容”放在包含路径中一个文件夹的末尾是可行的。

现在,考虑错误的情况。如果您将包含路径配置为意外指定boost/根集线器本身,会发生什么?好吧,现在可以做到这一点:

#include <asio.hpp>

但是,一旦预处理器在该标头上启动,它将看到:

#include <boost/asio/associated_allocator.hpp>

嗯。。预处理程序会寻找它,却永远找不到

摘要

在源代码中使用boost标头时,始终将其与boost hub序言一起引用:

#include <boost/headername.hpp>

,并始终在构建配置中包含boost/集线器所在的文件夹,作为修改的包含路径; 不是完整路径,包括boost/集线器。