3

我通过从 svn 结帐然后在 Windows 上安装了 boost_1_54

bootstrap
.\b2

依赖于 boost 的 QuantLib 库除了一个项目之外都编译得很好:使用 BOOST_MESSAGE 的测试套件。这是未定义的。我可以看到我的 boost 版本中没有 BOOST_MESSAGE。因此,这是 QuantLib 不兼容还是我错过了什么?在我的 linux boost 版本上,同样的事情适用于 BOOST_MESSAGE - 它是未定义的

我已经看到了这一点,但我不确定如何解释这一点。

4

3 回答 3

9

恐怕你给我们的功劳多于我们应得的:)

我们还没有针对 Boost svn 编译 QuantLib。我尝试过的最新版本是 Boost 1.53(最新发布的版本),其中 BOOST_MESSAGE 仍然可用。

不过,感谢您的提醒。我将修补库,以便为下一个版本做好准备。正如评论中提到的,它应该像添加一样简单

#if BOOST_VERSION > 105300
#define BOOST_MESSAGE(msg) BOOST_TEST_MESSAGE(msg)
#endif

到测试套件/utilities.hpp。

于 2013-03-04T09:33:36.333 回答
0

在linux上我必须添加

libboost_unit_test_framework.so

到 Linker->Libraries 和

#include <boost/test/unit_test.hpp>

#define BOOST_MESSAGE( M )                  BOOST_TEST_MESSAGE( M )

已经存在于 test/test_tools.hpp 中。在 Windows 上我有不同的#defines 并且这不存在,所以我将它添加到

unit_test_log.hpp

其中 BOOST_TEST_MESSAGE 被定义(在 boost 文件中,以避免在其他应用程序使用 BOOST_MESSAGE 的情况下再次出现同样的问题)。BOOST_MESSAGE 问题已解决,但仍无法消除歧义

const void* = boost::test_tools::check_is_close

const void* = boost::test_tools::check_is_small

因为这些是模板。所以解决方案是删除它(测试套件编译得很好)或使用适当的指向函数模板的指针

于 2013-03-04T13:58:14.777 回答
0

在 Windows 上,在移动或功能之后

_use_check

在实用程序.hpp

更改为默认没有指向 TEMPLATE 函数的指针,因此更改为:

void _use_check(
                        const void*,
                        const void*) const {}

构建测试套件项目时仍然存在错误。未解决的外部:fdmhestonfwdop、fdmblackscholesfwdop、fdmsquarerootfwdop。显然这个类(头文件+源代码)我必须添加到 Quantlib 项目中,再次构建库 QuantLib-vc110-mt-gd.lib 然后重建测试套件项目。在对 VS 链接器错误“lnk1210 超出内部 ilk 大小限制链接且增量无”感到满意后(它真的很喜欢 RAM,但在 Windows 上我的资源非常有限),没关系。编译。:p

于 2013-03-07T21:23:44.267 回答