gpt4 book ai didi

exception - 未找到 boost 符号

转载 作者:行者123 更新时间:2023-12-03 18:18:21 25 4
gpt4 key购买 nike

我正在尝试编译/移植旧版本的 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 中并使用符号链接(symbolic link)将头文件放在同一目录中,但没有运气。

有没有我应该链接的库 -l或带有 -I 的包含路径?我应该如何获得该符号的引用?

最佳答案

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 何时定义它。您可以配置您的构建以避免定义并克服您遇到的链接器错误。

如果您无法更改编译器配置以避免定义,那么您可能需要定义 boost::throw_exception(std::exception const & e)你自己在 OpenOffice 代码的某个地方。不过,我不熟悉该代码,所以我无法给出一个好的建议。

关于exception - 未找到 boost 符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9272648/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com