我的下载文件夹中有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
目录中的某些位置?
答案 0 :(得分:2)
假设boost
已在系统上正确配置并构建,则boost包含root的集线器将位于一个位置。例如:如果您在c:\Stuff\boost_1_70_0
中下载并构建了boost,那么在该文件夹内将是boost包含集c:\Stuff\boost_1_70_0\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/
集线器。