未找到提升符号

Jer*_*rry 7 boost exception ld throw

我正在尝试编译/移植旧版本的OpenOffice.它使用Boost v1.34.1,它是源树的一部分.错误消息如下:

Undefined symbols:
  "boost::throw_exception(std::exception const&)", referenced from:
      boost::detail::shared_count::shared_count<ScToken>(ScToken*)in detfunc.o
ld: symbol(s) not found
Run Code Online (Sandbox Code Playgroud)

Boost对我来说是新的,我无法在网上找到太多帮助我理解这一点.从错误消息中,我了解到我可能需要链接库.但是,boost::throw_exception在头文件中定义没有匹配的库(我可以找到).只是为了踢,我尝试#include <boost/throw_exception.hpp>使用detfunc并使用符号链接将头文件放在同一目录中,没有运气.

是否有我应该链接的库-l或包含路径-I?我应该如何引用该符号?

use*_*210 13

Boost期望项目要么使用宏BOOST_NO_EXCEPTIONS未定义构建,要么定义函数boost::throw_exception本身.

<boost/throw_exception.hpp>版本1.34.1开始:

namespace boost
{

#ifdef BOOST_NO_EXCEPTIONS

void throw_exception(std::exception const & e); // user defined

#else

//[Not user defined --Dynguss]
template<class E> inline void throw_exception(E const & e)  
{
    throw e;
}

#endif

} // namespace boost
Run Code Online (Sandbox Code Playgroud)

Boost的配置标头将决定是否定义宏.看起来它归结为您正在使用的编译器,但可能还有其他因素.查看boost/config/compiler/与您的编译器对应的头文件的文件夹,然后BOOST_NO_EXCEPTIONS在其中搜索.周围应该有一些条件#define来帮助解释Boost何时定义它.您可以配置构建以避免定义并通过您遇到的链接器错误.

如果您无法更改编译器配置以避免定义,那么您可能会boost::throw_exception(std::exception const & e)在OpenOffice代码中的某处定义自己.不过,我对这段代码并不熟悉,所以我无法给出一个好的建议.