首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"QuantLib::MulticurvesSensitivities:performCalculations()常量的quantlib多重定义

"QuantLib::MulticurvesSensitivities:performCalculations()常量的quantlib多重定义
EN

Stack Overflow用户
提问于 2016-12-08 14:39:35
回答 1查看 125关注 0票数 1

我从官方源码通过apt-get install在ubuntu16.04上安装了boost。然后按照QuantLib 的安装指南进行操作

然后我复制一个quantlib示例( examples /EquityOption)来创建我自己的项目,我在testoption.cpp和testoption.cpp中创建了一个类,现在我有三个文件( testoption.hpp、testoption.cpp和EquityOption.cpp)。

在testoption.hpp中

代码语言:javascript
复制
#ifndef TESTOPTION_HPP
#define TESTOPTION_HPP
#include <ql/quantlib.hpp>
using namespace QuantLib
class testOption{
//class declaration
};
#endif

在EquityOption.cpp中

代码语言:javascript
复制
#include <ql/quantlib.hpp>
#include "testoption.hpp"
int main(int, char* [])
{
//some code here
}

在testoption.cpp中

代码语言:javascript
复制
#include "testoption.hpp"
//definition of member function in testOption

当我编译它并链接到QuantLib时,错误消息弹出:

CMakeFiles/EquityOption.dir/ATestClass.cpp.o: In function boost::function1<double, double>::get_vtable() const': /usr/local/include/boost/math/special_functions/detail/igamma_large.hpp:69: multiple definition ofQuantLib::MultiCurveSensitivities::performCalculations() const‘CMakeFiles/EquityOption.dir/EquityOption.cpp.o:/usr/local/include/ql/experimental/termstructures/multicurvesensitivities.hpp:106: first defined here CMakeFiles/EquityOption.dir/ATestClass.cpp.o: In function QuantLib::MultiCurveSensitivities::allZeros() const': /usr/local/include/boost/math/special_functions/detail/igamma_large.hpp:112: multiple definition ofQuantLib::MultiCurveSensitivities::allZeros() const’CMakeFiles/EquityOption.dir/EquityOption.cpp.o:/usr/local/include/ql/experimental/termstructures/multicurvesensitivities.hpp:151: first在此处定义CMakeFiles/EquityOption.dir/ATestClass.cpp.o:在函数QuantLib::MultiCurveSensitivities::sensitivities() const': /usr/local/include/boost/math/special_functions/detail/igamma_large.hpp:99: multiple definition ofQuantLib::MultiCurveSensitivities::sensitivities() const‘CMakeFiles/EquityOption.dir/EquityOption.cpp.o:/usr/local/include/ql/experimental/termstructures/multicurvesensitivities.hpp:129:中首先在此处定义CMakeFiles/EquityOption.dir/ATestClass.cpp.o:在函数QuantLib::MultiCurveSensitivities::inverseSensitivities() const': /usr/local/include/boost/math/special_functions/detail/igamma_large.hpp:100: multiple definition ofQuantLib::MultiCurveSensitivities::inverseSensitivities() const’CMakeFiles/EquityOption.dir/EquityOption.cpp.o:/usr/local/include/ql/experimental/termstructures/multicurvesensitivities.hpp:134中:first defined here CMakeFiles/EquityOption.dir/ATestClass.cpp.o: In function QuantLib::MultiCurveSensitivities::allNodes() const': /usr/local/include/boost/math/special_functions/detail/igamma_large.hpp:101: multiple definition ofQuantLib::MultiCurveSensitivities::allNodes() const‘CMakeFiles/EquityOption.dir/EquityOption.cpp.o:/usr/local/include/ql/experimental/termstructures/multicurvesensitivities.hpp:139: first defined here collect2: error: ld returned 1 exit status CMakeFiles/EquityOption.dir/build.make:123:目标'EquityOption’的配方失败

我用谷歌搜索了一下,发现了一个类似的问题:Build error using head revision of rquantlib with head revision of QuantLib and boost 1.56我尝试了Why do I get a multiple definition error while linking?的另一种解决方案,但失败了。我是c++的新手,我是否还需要修改源码的头文件,使其内联并重新编译-j库(在我的笔记本电脑上使用quantlib 4选项需要将近20分钟)?

EN

回答 1

Stack Overflow用户

发布于 2016-12-09 15:00:27

修改ql/experimental/terstrutures/multicurvesensitivities.hpp并使多曲线敏感类的成员函数成为内联函数并复制到默认的包含路径(在ubuntu16.04中,它的/usr/local/include/ql/experimental/terstructures)解决了这个问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41033287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档