如何在C ++应用程序中包含boost库?

时间:2012-04-09 23:31:28

标签: libraries c++

非常对Linux和终端缺乏经验,但我正在努力学习。我之前从未包含过外部库。现在我需要在Ubuntu中使用G ++开发的程序中包含Boost.Asio库。

从一开始,有人可以非常友好地,非常仔细地解释如何解决这个问题吗?

编辑:

扩展原始问题:如果我需要将此代码发送给其他人,以便他们在完全独立的计算机上运行,​​但在相同的环境中,我该如何考虑这一点?如果整个过程涉及将库文件放在与代码相同的文件夹中,我是否只将这些库文件与.cpp一起发送给另一个人?

3 个答案:

答案 0 :(得分:1)

您已经提到过您使用的是Ubuntu,因此使用boost的最简单方法是首先安装libboost-all-dev包(来自synaptic),它将为您安装所有内容,包括需要编译的内容。然后你只需要以通常的方式使用g++

请注意,版本是否符合您的要求,如果没有,您可能需要自行安装。另一方面,boost主要是仅头文件库,因此您只需要将文件(在Ubuntu中右键单击...)解压缩到一个文件夹并在编译时链接到它:

g++ hello_world.cpp -I boost_1_49_0/boost

其中最后一个指定编译器查找boost标头的路径(请使用绝对路径)。

如果你想把你的程序发送给其他人,不要只复制一些boost文件,因为依赖性,它不起作用。要求他们安装与您相同的环境,这很简单(只需解压缩文件......)。

答案 1 :(得分:0)

我不知道你的具体IDE,或者特别是关于Boost.Asio的信息,但总的来说:

每当您需要链接到库时,都会有一个名为lib???.a的文件,您需要它。您需要将-l???标记传递给g++以链接到该文件。

(我自己对细节不太熟悉,所以可能还有其他文件格式等等......)


关于编辑:

“正确”的方法是让他们自己下载库,然后将-l???传递给他们的链接器。在你的源代码中包含Boost会使它巨大,并且没有充分的理由......毕竟不像你在代码中包含STL。

答案 2 :(得分:0)

您不包含库,而是声明对它的依赖。例如。考虑使用autoconfautomake,然后添加AX_BOOST_BASE 1 以要求提升,AX_BOOST_ASIO要求ASIO库。在Makefile.am文件中,您使用BOOST_CPPFLAGSBOOST_LDFLAGS宏,并依赖./configure来正确设置它们。然后,无论谁使用您的代码,都必须运行熟知的./configure脚本,该脚本将分析环境以获取boost的位置,并在构建环境中设置适当的值,以便make成功。

至少这是理论。在实践中,有一个原因是整个事物被称为autohell。存在替代方案,例如CMake或提升自己的bjam。但概要总是相同的:您在构建配置中声明依赖关系,并且消耗产品的目标位置必须满足要求(这意味着它必须下载/安装所需的boost版本,在您的情况下)。否则,您将进入分发二进制文件的业务,由于您希望部署应用程序的平台/体系结构/发行版的丰富性,这会产生问题。

显然,如果您使用不同的构建系统,例如ANT,那么您应该参考构建系统文档,了解如何声明boost的要求。

1:ax_boost.m4不是唯一的检测m4库,还有其他的,但是在GNU autoconf宏列表中记录了