【发布时间】:2016-12-08 06:39:35
【问题描述】:
我通过官方来源的 apt-get install 在 ubuntu16.04 上安装 boost。 然后按照QuantLib 的安装指南进行操作
然后我复制一个 quantlib 示例(Examples/EquityOption)来创建我自己的项目,我在 testoption.cpp 和 testoption.cpp 中创建一个类,现在我有三个文件(testoption.hpp、testoption.cpp 和 EquityOption。 cpp)
在 testoption.hpp 中
#ifndef TESTOPTION_HPP
#define TESTOPTION_HPP
#include <ql/quantlib.hpp>
using namespace QuantLib
class testOption{
//class declaration
};
#endif
在EquityOption.cpp中
#include <ql/quantlib.hpp>
#include "testoption.hpp"
int main(int, char* [])
{
//some code here
}
在 testoption.cpp 中
#include "testoption.hpp"
//definition of member function in testOption
当我编译它并链接到 QuantLib 时,会弹出错误消息:
CMakeFiles/EquityOption.dir/ATestClass.cpp.o:在函数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:这里首先定义
CMakeFiles/EquityOption.dir/ATestClass.cpp.o:在函数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/multicurvesensitive.hpp:151:这里首先定义
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/multicurvesensitive.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/multicurvesensitive.hpp:134:这里首先定义
CMakeFiles/EquityOption.dir/ATestClass.cpp.o:在函数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:首先定义在这里
collect2:错误:ld 返回 1 个退出状态
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++ 很陌生,我是否还需要修改源头文件以使 mothed 内联并再次编译 quantlib(在我的笔记本电脑上使用 -j 4 选项需要将近 20 分钟)?
【问题讨论】: