boost :: bind似乎用不同的编译器产生不同的符号?

时间:2015-03-11 00:00:50

标签: c++ templates boost callback boost-bind

我有一个使用模板和回调的共享对象库。 我需要将它移植到另一个使用旧版g ++(4.1.2)的系统。

这是我正在做的伪代码:

shrdPtr.reset( new DataRecvr<T>(aString,boost::bind(&MyClass<T>::myCallBack, this,_1)));

它适用于较新的编译器,但是当我在旧系统上构建它时,我在运行时找不到符号。

我用过nm mySo.so | c ++ flt比较und和ldd -u -r mySo.so

在较新的编译器(g ++ 4.4.7)上,它产生:
    DataRecvr<TemplateName>::DataRecvr(std::basic_string<char,std::char_traits<char>,std::allocator<cahr> >const&, boost::function1,void,shrdPtr<TemplateName>&> const&

在较旧的编译器上产生: DataRecvr<TemplateName>::DataRecvr(std::basic_string<char,std::char_traits<char>,std::allocator<char> >const&, boost::function1,void,shrdPtr<TemplateName>& std::allocator<boost::function_base> >const&)

正如您所看到的,较旧的编译器在符号中产生了额外的东西,这些东西在运行时没有得到解析。

我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

似乎我包括了旧版本的提升。给我带来问题的系统有多个版本的提升。当我将include路径设置为boost_144时,我的问题就消失了。也许旧版本的boost会使用与我正在使用的构造函数不兼容的绑定做奇怪的事情。