我想在我的项目中使用Boost的ASIO库。它的文档说如果不使用正则表达式而不使用SSL,它可以只是头文件。但是,为bcp
运行asio
会拉动很多图书馆,其中一些图书馆有源代码,因此需要编译,bjam
等。
我可以以某种方式在项目中使用ASIO作为标题,没有libs / source吗?我只需要ASIO,而不是Boost的其他部分。
编辑:ASIO希望Boost.System
有一个lib链接 - 这种依赖关系不能让我只能使用标题ASIO吗?
答案 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路由。