我通過ubuntu16.04安裝升壓易於得到來自官方源安裝 然後按照QuantLibquantlib多個defininition:performCalculations()const的」
的安裝指南,然後我複製。其中一個quantlib示例(Examples/EquityOption)創建我自己的項目,我在testoption.cpp和testoption.cpp中創建一個類,現在我有三個文件(testoption.hpp,testoption.cpp和EquityOption.cpp)
in 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
whre我把它和鏈接編譯成QuantLib,錯誤emessage彈出:
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 of
QuantLib :: MultiCurveSensitivities :: performCalculations()const' CMakeFiles/EquityOption.dir/EquityOption.cpp.o:/ usr/local/include/ql/experimental/termstructure s/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 of
QuantLib :: MultiCurveSensitivities :: allZeros()const' CMakeFiles/EquityOption.dir/EquityOption.cpp.o :/usr/local/include/ql/experimental/termstructures/multicurvesensitivities.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 of
QuantLib :: 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 of
QuantLib :: MultiCurveSensitivities :: inverseSensitivities()const' CMakeFiles/Eq uityOption.dir/EquityOption.cpp.o:/usr/local/include/ql/experimental/termstructures/multicurvesensitivities.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 of
QuantLib: :MultiCurveSensitivities :: allNodes()const' CMakeFiles/EquityOption.dir/EquityOption.cpp.o:/usr/local/include/ql/experimental/termstructures/multicurvesensitivities.hpp:139:此處首先定義 collect2:error: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?另一種解決方案,但˚F ailed。 我對C++相當陌生,我是否還需要修改源頭文件以使內聯並重新編譯quantlib(在筆記本電腦上使用-j 4選項需要將近20分鐘)?
確認。值得一提的是,這個問題在git倉庫中得到了解決。另一個解決方法(不管問題可能是個好主意)將不包括全局頭文件'ql/quantlib.hpp',而只包含您需要的特定頭文件。這將進一步減少編譯時間。 –
另外,修改後運行'make'和'make install'可能比手工複製標題更安全。只有少數文件會受到影響並重新編譯,因此不會像原始編譯那樣長。 –