我非常对Linux和终端缺乏经验,但我正在努力学习。我之前从未包含过外部库。现在我需要在Ubuntu中使用G ++开发的程序中包含Boost.Asio库。
从一开始,有人可以非常友好地,非常仔细地解释如何解决这个问题吗?
编辑:
扩展原始问题:如果我需要将此代码发送给其他人,以便他们在完全独立的计算机上运行,但在相同的环境中,我该如何考虑这一点?如果整个过程涉及将库文件放在与代码相同的文件夹中,我是否只将这些库文件与.cpp一起发送给另一个人?
答案 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)
您不包含库,而是声明对它的依赖。例如。考虑使用autoconf和automake,然后添加AX_BOOST_BASE
1 以要求提升,AX_BOOST_ASIO
要求ASIO库。在Makefile.am
文件中,您使用BOOST_CPPFLAGS
和BOOST_LDFLAGS
宏,并依赖./configure来正确设置它们。然后,无论谁使用您的代码,都必须运行熟知的./configure
脚本,该脚本将分析环境以获取boost的位置,并在构建环境中设置适当的值,以便make
成功。
至少这是理论。在实践中,有一个原因是整个事物被称为autohell。存在替代方案,例如CMake或提升自己的bjam。但概要总是相同的:您在构建配置中声明依赖关系,并且消耗产品的目标位置必须满足要求(这意味着它必须下载/安装所需的boost版本,在您的情况下)。否则,您将进入分发二进制文件的业务,由于您希望部署应用程序的平台/体系结构/发行版的丰富性,这会产生问题。
显然,如果您使用不同的构建系统,例如ANT,那么您应该参考构建系统文档,了解如何声明boost的要求。
1:ax_boost.m4
不是唯一的检测m4库,还有其他的,但是在GNU autoconf宏列表中记录了