Boost.Asio仅作为标题

时间:2011-02-23 09:50:07

标签: c++ boost boost-asio

我想在我的项目中使用Boost的ASIO库。它的文档说如果不使用正则表达式而不使用SSL,它可以只是头文件。但是,为bcp运行asio会拉动很多图书馆,其中一些图书馆有源代码,因此需要编译,bjam等。

我可以以某种方式在项目中使用ASIO作为标题,没有libs / source吗?我只需要ASIO,而不是Boost的其他部分。

编辑:ASIO希望Boost.System有一个lib链接 - 这种依赖关系不能让我只能使用标题ASIO吗?

3 个答案:

答案 0 :(得分:13)

AFAIK您可以从http://think-async.com/Asio/AsioAndBoostAsio

获取asio的非升级版本

“ - Boost.Asio使用Boost.System库来提供对错误代码的支持(boost :: system :: error_code和boost :: system :: system_error).Asio在它自己的命名空间中包含这些(asio :: error_code和asio :: system_error)。这些类的Boost.System版本目前支持更好的用户定义错误代码的可扩展性。

- Asio仅限头文件,对于大多数用途,不需要链接任何Boost库。如果你想使用boost :: thread启动线程,Boost.Asio总是要求你链接Boost.System库,也要反对Boost.Thread。“

答案 1 :(得分:7)

接受的答案100%有效且推荐,但另一个选项 - 如果您真的想/需要使用 Boost Asio-是尝试使用-DBOOST_ERROR_CODE_HEADER_ONLY编译您的应用程序。使用此宏(记录为here)可以满足使用Boost.System 链接的需要。但是,值得阅读this answer中提到的警告。特别是,您可能需要创建一个包含以下内容的“虚拟”CPP文件:

#define BOOST_ERROR_CODE_HEADER_ONLY
#include <boost/system/error_code.hpp>

并禁用仅该文件的优化。 (就个人而言,我不需要这样做,但YMMV ......)

答案 2 :(得分:2)

我认为bcp会提取正则表达式库,因为它可以被使用(在Windows机器上它默认使用)。我希望你可以删除正则表达式库源文件没问题。如果您是Windows上的编译器,请确保添加正确的编译器标志 (-DBOOST_DATE_TIME_NO_LIB-DBOOST_REGEX_NO_LIB

详细信息来自this页面(根据您已发现的声音)。

我不确定bcp有多聪明 - 我不认为你可以通过上面给出的定义来阻止它遵循mscv路由。