如何在 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 &lt;boost/type_index.hpp&gt;。修复你的包含路径,在所有你的源文件引用前加上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?

如何在Android库AAR中包含第三方JAR,而无需合并代码

Angular 库无法在包中包含第三方库

在 wildfly jar 中包含第三方库(keycloak SPI)