[英]Using C++11 versus GCC 4.8 default causes link error with private inheritance and boost
[英]Build process crashes with boost and C++11
我有的:
boost::function
, boost::shared_ptr
, boost::bind
和boost::any
。 我的麻烦:
当我用gcc编译时(v整个项目或仅带有-std=c++11
库,boost崩溃会导致很多错误。QtCreator显示大约4000个错误,但它们非常相似,看起来像:
typedef boost::function< void( RecordSet& )> callback; is not complete type
BOOST_NOEXCEPT'does not name a type ~any() BOOST_NOEXCEPT
等等...
我试图用C ++ 11 std
库重写库,但是std
不包含boost::any
类似物,所以这不是一个好主意。
题:
如何使用c ++ 11编译boost(或至少libslave)?
Boost版本:1.54(来自回购)
g ++版本:4.8.4(来自回购)
Qt版本:5.5(从官方网站下载)
Linux Mint:17.3罗莎
更新:
示例:您可以通过此链接下载我尝试编译的代码。
指令:
打开MakeFile并将CXX变量替换为
CXX = g ++ -std = c ++ 11
再次尝试进行操作,您会遇到错误。
PS要编译库,您需要libmysqld-dev
, libboost-all-dev
, libmysqlclient-dev
。
可能您还需要其他东西,但我不会保留。 抱歉。
我发现了该hack,它对我有用。
我用以下字符串将文件nanomysql.h中的 boost::bind
用法替换为std :: bind:
...
typedef std::map<std::string, field> value_t;
typedef std::vector< value_t > result_t;
void store(result_t& out)
{
//You need specify template because of push_back has overloads
auto hack = std::bind<void(result_t::*)(const value_t&)>(&result_t::push_back, &out, _1);
use(hack);
}
...
并将库中所有文件中的所有boost::shared_ptr
, boost::function
替换为std::shared_ptr
和std::function
。
之后,所有内容都可以编译并可以正常使用std=c++11
标志。
您可以在此处查看nanomysql.h的整个代码:
使用libslave的实际分支-https: //github.com/vozbu/libslave ,支持c ++ 11。 即将支持mysql 5.6和5.7
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.