Exception 找不到增压符号
我正在尝试编译/移植OpenOffice的旧版本。它使用BoostV1.34.1,它是源代码树的一部分。错误消息如下所示:Exception 找不到增压符号,exception,boost,ld,throw,Exception,Boost,Ld,Throw,我正在尝试编译/移植OpenOffice的旧版本。它使用BoostV1.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
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
未定义的符号:
“boost::throw_异常(std::exception const&)”,引用自:
boost::detail::shared_count::detfunc.o中的shared_count(ScToken*)
ld:找不到符号
Boost对我来说是新事物,我还没有在网上找到多少东西来帮助我理解它。从错误消息中,我了解到我可能需要链接一个库。但是,boost::throw_exception
是在没有匹配库(我可以找到)的头文件中定义的。为了好玩,我尝试在detfunc中包含#include
,并使用符号链接将头文件放在同一个目录中,但没有成功
是否有我应该链接的库
-l
或包含路径-I
?如何获取中引用的符号?Boost希望项目要么在宏Boost\u NO\u异常
未定义的情况下构建,要么定义函数Boost::throw\u异常本身
从版本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
namespace boost
{
#ifdef BOOST_无例外
void throw_异常(std::exception const&e);//用户定义
#否则
//[非用户定义--Dynguss]
模板内联无效抛出异常(E const&E)
{
投掷e;
}
#恩迪夫
}//名称空间提升
Boost的配置头将决定是否定义宏。看起来它可以归结为您正在使用的编译器,但可能还有其他因素。查看boost/config/compiler/
文件夹中与编译器对应的头文件,然后在其中搜索boost\u NO\u异常。#define
应该有一些条件来帮助解释Boost何时定义它。您可以配置生成以避免定义,并通过遇到的链接器错误
如果您无法更改编译器配置以避免定义,那么您可能将自己定义在OpenOffice代码中的某个地方。不过,我不熟悉该代码,因此我无法给出一个很好的建议。谢谢!我最终通读了throw\u exception.hpp
,并准确地找到了您的答案。我不知道编译器标志的boost/config/compiler/
,但可以肯定的是,boost\u没有定义异常。