Складання прикладу QuantLib

Я прослідкував за вказівками для встановлення QuantLib для Mac звідси http://quantlib.org/install/macosx.shtml , а також виправлено прапори за допомогою команд:

експорт CXXFLAGS = -stdlib = libstdc ++

експорт LDFLAGS = -mmacosx-version-min = 10.6

Проте, коли я намагаюся скласти приклади, як сказано в керівництві, я отримую таку помилку:

In file included from BermudanSwaption.cpp:22:
In file included from /opt/local/include/ql/quantlib.hpp:43:
In file included from /opt/local/include/ql/experimental/all.hpp:25:
In file included from /opt/local/include/ql/experimental/volatility/all.hpp:21:
In file included from /opt/local/include/ql/experimental/volatility/zabr.hpp:31:
In file included from /opt/local/include/ql/math/statistics/incrementalstatistics.hpp:35:
In file included from /opt/local/include/boost/accumulators/statistics/stats.hpp:14:
In file included from /opt/local/include/boost/accumulators/statistics_fwd.hpp:12:
/opt/local/include/boost/mpl/print.hpp:50:19: warning: in-class initialization of non-static data member is a
      C++11 extension [-Wc++11-extensions]
    const int m_x = 1/(sizeof(T) - sizeof(T));
                  ^
1 warning generated.
Undefined symbols for architecture x86_64:
  "QuantLib::MultiStepSwap::nextTimeStep(QuantLib::CurveState const&, std::__1::vector >&, std::__1::vector >, std::__1::allocator > > >&)", referenced from:
      vtable for QuantLib::MultiStepSwap in BermudanSwaption-a6bf28.o
  "QuantLib::ExerciseAdapter::nextTimeStep(QuantLib::CurveState const&, std::__1::vector >&, std::__1::vector >, std::__1::allocator > > >&)", referenced from:
      vtable for QuantLib::ExerciseAdapter in BermudanSwaption-a6bf28.o
  "QuantLib::OneStepForwards::nextTimeStep(QuantLib::CurveState const&, std::__1::vector >&, std::__1::vector >, std::__1::allocator > > >&)", referenced from:
      vtable for QuantLib::OneStepForwards in BermudanSwaption-a6bf28.o
  "QuantLib::BermudanExercise::BermudanExercise(std::__1::vector > const&, bool)", referenced from:
      _main in BermudanSwaption-a6bf28.o
  "QuantLib::MultiStepNothing::nextTimeStep(QuantLib::CurveState const&, std::__1::vector >&, std::__1::vector >, std::__1::allocator > > >&)", referenced from:
      vtable for QuantLib::MultiStepNothing in BermudanSwaption-a6bf28.o
  "QuantLib::MultiStepRatchet::nextTimeStep(QuantLib::CurveState const&, std::__1::vector >&, std::__1::vector >, std::__1::allocator > > >&)", referenced from:
      vtable for QuantLib::MultiStepRatchet in BermudanSwaption-a6bf28.o
  "QuantLib::MultiStepForwards::nextTimeStep(QuantLib::CurveState const&, std::__1::vector >&, std::__1::vector >, std::__1::allocator > > >&)", referenced from:
      vtable for QuantLib::MultiStepForwards in BermudanSwaption-a6bf28.o
  "QuantLib::MultiStepSwaption::nextTimeStep(QuantLib::CurveState const&, std::__1::vector >&, std::__1::vector >, std::__1::allocator > > >&)", referenced from:
      vtable for QuantLib::MultiStepSwaption in BermudanSwaption-a6bf28.o
  "QuantLib::OneStepOptionlets::nextTimeStep(QuantLib::CurveState const&, std::__1::vector >&, std::__1::vector >, std::__1::allocator > > >&)", referenced from:
      vtable for QuantLib::OneStepOptionlets in BermudanSwaption-a6bf28.o
  "QuantLib::MultiStepOptionlets::nextTimeStep(QuantLib::CurveState const&, std::__1::vector >&, std::__1::vector >, std::__1::allocator > > >&)", referenced from:
      vtable for QuantLib::MultiStepOptionlets in BermudanSwaption-a6bf28.o
  "QuantLib::OneStepCoinitialSwaps::nextTimeStep(QuantLib::CurveState const&, std::__1::vector >&, std::__1::vector >, std::__1::allocator > > >&)", referenced from:
      vtable for QuantLib::OneStepCoinitialSwaps in BermudanSwaption-a6bf28.o
  "QuantLib::OneStepCoterminalSwaps::nextTimeStep(QuantLib::CurveState const&, std::__1::vector >&, std::__1::vector >, std::__1::allocator > > >&)", referenced from:
      vtable for QuantLib::OneStepCoterminalSwaps in BermudanSwaption-a6bf28.o
  "QuantLib::MultiStepCoinitialSwaps::nextTimeStep(QuantLib::CurveState const&, std::__1::vector >&, std::__1::vector >, std::__1::allocator > > >&)", referenced from:
      vtable for QuantLib::MultiStepCoinitialSwaps in BermudanSwaption-a6bf28.o
  "QuantLib::MultiStepInverseFloater::nextTimeStep(QuantLib::CurveState const&, std::__1::vector >&, std::__1::vector >, std::__1::allocator > > >&)", referenced from:
      vtable for QuantLib::MultiStepInverseFloater in BermudanSwaption-a6bf28.o
  "QuantLib::MultiStepCoterminalSwaps::nextTimeStep(QuantLib::CurveState const&, std::__1::vector >&, std::__1::vector >, std::__1::allocator > > >&)", referenced from:
      vtable for QuantLib::MultiStepCoterminalSwaps in BermudanSwaption-a6bf28.o
  "QuantLib::MultiStepCoterminalSwaptions::nextTimeStep(QuantLib::CurveState const&, std::__1::vector >&, std::__1::vector >, std::__1::allocator > > >&)", referenced from:
      vtable for QuantLib::MultiStepCoterminalSwaptions in BermudanSwaption-a6bf28.o
  "QuantLib::MultiStepPeriodCapletSwaptions::nextTimeStep(QuantLib::CurveState const&, std::__1::vector >&, std::__1::vector >, std::__1::allocator > > >&)", referenced from:
      vtable for QuantLib::MultiStepPeriodCapletSwaptions in BermudanSwaption-a6bf28.o
  "QuantLib::Error::Error(std::__1::basic_string, std::__1::allocator > const&, long, std::__1::basic_string, std::__1::allocator > const&, std::__1::basic_string, std::__1::allocator > const&)", referenced from:
      QuantLib::DiscretizedOption::reset(unsigned long) in BermudanSwaption-a6bf28.o
      QuantLib::Instrument::setupArguments(QuantLib::PricingEngine::arguments*) const in BermudanSwaption-a6bf28.o
      QuantLib::Option::setupArguments(QuantLib::PricingEngine::arguments*) const in BermudanSwaption-a6bf28.o
      QuantLib::Payoff::accept(QuantLib::AcyclicVisitor&) in BermudanSwaption-a6bf28.o
      QuantLib::BlackVolTermStructure::accept(QuantLib::AcyclicVisitor&) in BermudanSwaption-a6bf28.o
      QuantLib::SimpleQuote::value() const in BermudanSwaption-a6bf28.o
      QuantLib::Handle::operator->() const in BermudanSwaption-a6bf28.o
      ...
  "QuantLib::detail::operator<<(std::__1::basic_ostream >&, QuantLib::detail::percent_holder const&)", referenced from:
      calibrateModel(boost::shared_ptr const&, std::__1::vector, std::__1::allocator > > const&) in BermudanSwaption-a6bf28.o
      _main in BermudanSwaption-a6bf28.o
  "QuantLib::operator<<(std::__1::basic_ostream >&, QuantLib::Date const&)", referenced from:
      QuantLib::InterestRateIndex::valueDate(QuantLib::Date const&) const in BermudanSwaption-a6bf28.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Чи є щось не так, що я зробив? Яка проблема з "лінкером" тут? Я б дуже вдячний за допомогу, оскільки я намагався отримати це працювати дуже давно.

2

2 Відповіді

Я також зустрічався з таким питанням кілька хвилин тому, і я зрозумів, що ця помилка викликана з стандартної бібліотеки, встановленої Mac. Потрібно встановити -stdlib = libstdc ++ під час створення, порівняно з libc ++ за замовчуванням на декількох останніх версіях MAC.

1
додано
чому це справа - мої помилки встановлення говорять про використання libc ++ (що є більш новим, на mac os x 10.12)
додано Автор rrg, джерело

Ви не можете просто зібрати BermudanSwaption.cpp і сподіватися, що все буде добре. Ви повинні скомпілювати всю бібліотеку QuantLib і посилатися зі згенерованими бібліотечними файлами. Для отримання додаткової інформації, будь ласка, Google "Компіляція та зв'язування C ++".

Безперечно, найпростіший спосіб це зробити на Mac - зробити це з Xcode. Вам потрібно буде створити новий проект Xcode і імпортувати в нього всі файли проекту Quantlib. Потім вам потрібно буде створити основну() функцію. Xcode робить компіляцію та зв'язування для вашої автоматично.

У своєму скріншоті, у мене QuantLib працює в Xcode і намагався процес НУ.

enter image description here

1
додано
@Elekko Вам слід додати шлях INCLUDE до Xcode, де ви встановлюєте файли.
додано Автор John, джерело
Точно так само, як і ви, але #include не знайдено відповідно до XCode, навіть якщо я можу його побачити
додано Автор aLu, джерело