我正在尝试编译/移植旧版本的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
Boost对我来说是新的,我无法在网上找到太多帮助我理解这一点.从错误消息中,我了解到我可能需要链接库.但是,boost :: throw_exception是在头文件中定义的,没有匹配的库(我可以找到).只是为了踢,我试过#include< boost / throw_exception.hpp>在detfunc和使用符号链接将头文件放在同一目录中没有运气.
解决方法
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
Boost的配置标头将决定是否定义宏.看起来它归结为您正在使用的编译器,但可能还有其他因素.在boost / config / compiler /文件夹中查看与编译器对应的头文件,然后在其中搜索BOOST_NO_EXCEPTIONS. #define周围应该有一些条件来帮助解释Boost何时定义它.您可以配置构建以避免定义并通过您遇到的链接器错误.
如果您无法更改编译器配置以避免定义,那么您可能会在OpenOffice代码中的某处自行定义boost :: throw_exception(std :: exception const& e).不过,我对这段代码并不熟悉,所以我无法给出一个好的建议.
原文地址:https://www.jb51.cc/c/112298.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。