如何在 C++ 窗口中包含第三方库?
Posted
技术标签:
【中文标题】如何在 C++ 窗口中包含第三方库?【英文标题】:How to include third party libraries in C++ windows? 【发布时间】:2019-06-07 05:46:23 【问题描述】:我的下载文件夹中有 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
目录中的某个位置?
添加目录图片:
【问题讨论】:
C:\Users\Owner\Downloads\boost_1_70_0\boost
的内容是什么?是否有名为boost
的子目录?
是的。我将包括目录的图片
那个修改包含路径的目录应该是-IC:\Users\Owner\Downloads\boost_1_70_0
。所有的 boost 头文件都在它们指定的文件名中寻找 boost 根。同样,您的来源也应该这样做,因此您的来源是错误的。它应该说#include <boost/type_index.hpp>
。修复你的包含路径,在所有你的源文件引用前加上boost/
来提升标题,你应该很高兴。
与此相关的是,现在发布的那张图片不是@Someprogrammerdude 询问的目录。他特意问了C:\Users\Owner\Downloads\boost_1_70_0\boost
的内容是什么;你显示了C:\Users\Owner\Downloads\boost_1_70_0
的内容。他问是有原因的,这与我之前的评论直接相关。
@WhozCraig 感谢它的工作。对于未来的 c/c++ 初学者来说,如果你“回答它”将会很有帮助。我会将其标记为答案。
【参考方案1】:
假设boost
已正确配置并构建在您的系统上,那么boost include root 的集线器将位于一个位置。例如:如果您在c:\Stuff\boost_1_70_0
中下载并构建了boost,那么该文件夹中将是boost 包含集c:\Stuff\boost_1_70_0\boost
的中心,它包含所有boost 标头。
boost 是通过修改包含路径来引用的,以提供对 boost 包含集线器的访问; 不提供对中心中最顶层标题的访问。与 openssl 类似,boost 的所有头文件都包含在其 自己的 头文件中,并带有 boost/
。 boost的消费者也应该这样做,因此,包含路径必须包含可以找到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/
root 集线器本身会发生什么?好吧,现在你可以这样做了:
#include <asio.hpp>
但是,只要预处理器在该标头上启动,它就会看到:
#include <boost/asio/associated_allocator.hpp>
嗯.. 哎呀。预处理器会寻找这个并且永远找不到它
总结
在您的源代码中使用 boost 标头时,您始终使用 boost hub 序言来引用它们:
#include <boost/headername.hpp>
并始终将boost/
集线器所在的文件夹包含在您的构建配置中,作为修改后的包含路径; 不是包含boost/
集线器的完整路径。
【讨论】:
嗨,谢谢你的回答,对不起我的无知。“配置和构建”是什么意思?以上是关于如何在 C++ 窗口中包含第三方库?的主要内容,如果未能解决你的问题,请参考以下文章
使用亚马逊弹性mapreduce服务时如何在hadoop中包含第三方库
如何使用 webpack 在 index.html 中包含第三方库,如 jquery 和 bootstrap-table?