3 votos

Compilación del ejemplo QuantLib

He seguido las indicaciones para instalar QuantLib para mac desde aquí http://quantlib.org/install/macosx.shtml y también arreglé las banderas usando los comandos:

export CXXFLAGS = -stdlib=libstdc++

export LDFLAGS = -mmacosx-version-min=10.6

Sin embargo, cuando intento compilar los ejemplos tal y como se indica en las directrices, obtengo el siguiente error:

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<unsigned long, std::__1::allocator<unsigned long> >&, std::__1::vector<std::__1::vector<QuantLib::MarketModelMultiProduct::CashFlow, std::__1::allocator<QuantLib::MarketModelMultiProduct::CashFlow> >, std::__1::allocator<std::__1::vector<QuantLib::MarketModelMultiProduct::CashFlow, std::__1::allocator<QuantLib::MarketModelMultiProduct::CashFlow> > > >&)", referenced from:
      vtable for QuantLib::MultiStepSwap in BermudanSwaption-a6bf28.o
  "QuantLib::ExerciseAdapter::nextTimeStep(QuantLib::CurveState const&, std::__1::vector<unsigned long, std::__1::allocator<unsigned long> >&, std::__1::vector<std::__1::vector<QuantLib::MarketModelMultiProduct::CashFlow, std::__1::allocator<QuantLib::MarketModelMultiProduct::CashFlow> >, std::__1::allocator<std::__1::vector<QuantLib::MarketModelMultiProduct::CashFlow, std::__1::allocator<QuantLib::MarketModelMultiProduct::CashFlow> > > >&)", referenced from:
      vtable for QuantLib::ExerciseAdapter in BermudanSwaption-a6bf28.o
  "QuantLib::OneStepForwards::nextTimeStep(QuantLib::CurveState const&, std::__1::vector<unsigned long, std::__1::allocator<unsigned long> >&, std::__1::vector<std::__1::vector<QuantLib::MarketModelMultiProduct::CashFlow, std::__1::allocator<QuantLib::MarketModelMultiProduct::CashFlow> >, std::__1::allocator<std::__1::vector<QuantLib::MarketModelMultiProduct::CashFlow, std::__1::allocator<QuantLib::MarketModelMultiProduct::CashFlow> > > >&)", referenced from:
      vtable for QuantLib::OneStepForwards in BermudanSwaption-a6bf28.o
  "QuantLib::BermudanExercise::BermudanExercise(std::__1::vector<QuantLib::Date, std::__1::allocator<QuantLib::Date> > const&, bool)", referenced from:
      _main in BermudanSwaption-a6bf28.o
  "QuantLib::MultiStepNothing::nextTimeStep(QuantLib::CurveState const&, std::__1::vector<unsigned long, std::__1::allocator<unsigned long> >&, std::__1::vector<std::__1::vector<QuantLib::MarketModelMultiProduct::CashFlow, std::__1::allocator<QuantLib::MarketModelMultiProduct::CashFlow> >, std::__1::allocator<std::__1::vector<QuantLib::MarketModelMultiProduct::CashFlow, std::__1::allocator<QuantLib::MarketModelMultiProduct::CashFlow> > > >&)", referenced from:
      vtable for QuantLib::MultiStepNothing in BermudanSwaption-a6bf28.o
  "QuantLib::MultiStepRatchet::nextTimeStep(QuantLib::CurveState const&, std::__1::vector<unsigned long, std::__1::allocator<unsigned long> >&, std::__1::vector<std::__1::vector<QuantLib::MarketModelMultiProduct::CashFlow, std::__1::allocator<QuantLib::MarketModelMultiProduct::CashFlow> >, std::__1::allocator<std::__1::vector<QuantLib::MarketModelMultiProduct::CashFlow, std::__1::allocator<QuantLib::MarketModelMultiProduct::CashFlow> > > >&)", referenced from:
      vtable for QuantLib::MultiStepRatchet in BermudanSwaption-a6bf28.o
  "QuantLib::MultiStepForwards::nextTimeStep(QuantLib::CurveState const&, std::__1::vector<unsigned long, std::__1::allocator<unsigned long> >&, std::__1::vector<std::__1::vector<QuantLib::MarketModelMultiProduct::CashFlow, std::__1::allocator<QuantLib::MarketModelMultiProduct::CashFlow> >, std::__1::allocator<std::__1::vector<QuantLib::MarketModelMultiProduct::CashFlow, std::__1::allocator<QuantLib::MarketModelMultiProduct::CashFlow> > > >&)", referenced from:
      vtable for QuantLib::MultiStepForwards in BermudanSwaption-a6bf28.o
  "QuantLib::MultiStepSwaption::nextTimeStep(QuantLib::CurveState const&, std::__1::vector<unsigned long, std::__1::allocator<unsigned long> >&, std::__1::vector<std::__1::vector<QuantLib::MarketModelMultiProduct::CashFlow, std::__1::allocator<QuantLib::MarketModelMultiProduct::CashFlow> >, std::__1::allocator<std::__1::vector<QuantLib::MarketModelMultiProduct::CashFlow, std::__1::allocator<QuantLib::MarketModelMultiProduct::CashFlow> > > >&)", referenced from:
      vtable for QuantLib::MultiStepSwaption in BermudanSwaption-a6bf28.o
  "QuantLib::OneStepOptionlets::nextTimeStep(QuantLib::CurveState const&, std::__1::vector<unsigned long, std::__1::allocator<unsigned long> >&, std::__1::vector<std::__1::vector<QuantLib::MarketModelMultiProduct::CashFlow, std::__1::allocator<QuantLib::MarketModelMultiProduct::CashFlow> >, std::__1::allocator<std::__1::vector<QuantLib::MarketModelMultiProduct::CashFlow, std::__1::allocator<QuantLib::MarketModelMultiProduct::CashFlow> > > >&)", referenced from:
      vtable for QuantLib::OneStepOptionlets in BermudanSwaption-a6bf28.o
  "QuantLib::MultiStepOptionlets::nextTimeStep(QuantLib::CurveState const&, std::__1::vector<unsigned long, std::__1::allocator<unsigned long> >&, std::__1::vector<std::__1::vector<QuantLib::MarketModelMultiProduct::CashFlow, std::__1::allocator<QuantLib::MarketModelMultiProduct::CashFlow> >, std::__1::allocator<std::__1::vector<QuantLib::MarketModelMultiProduct::CashFlow, std::__1::allocator<QuantLib::MarketModelMultiProduct::CashFlow> > > >&)", referenced from:
      vtable for QuantLib::MultiStepOptionlets in BermudanSwaption-a6bf28.o
  "QuantLib::OneStepCoinitialSwaps::nextTimeStep(QuantLib::CurveState const&, std::__1::vector<unsigned long, std::__1::allocator<unsigned long> >&, std::__1::vector<std::__1::vector<QuantLib::MarketModelMultiProduct::CashFlow, std::__1::allocator<QuantLib::MarketModelMultiProduct::CashFlow> >, std::__1::allocator<std::__1::vector<QuantLib::MarketModelMultiProduct::CashFlow, std::__1::allocator<QuantLib::MarketModelMultiProduct::CashFlow> > > >&)", referenced from:
      vtable for QuantLib::OneStepCoinitialSwaps in BermudanSwaption-a6bf28.o
  "QuantLib::OneStepCoterminalSwaps::nextTimeStep(QuantLib::CurveState const&, std::__1::vector<unsigned long, std::__1::allocator<unsigned long> >&, std::__1::vector<std::__1::vector<QuantLib::MarketModelMultiProduct::CashFlow, std::__1::allocator<QuantLib::MarketModelMultiProduct::CashFlow> >, std::__1::allocator<std::__1::vector<QuantLib::MarketModelMultiProduct::CashFlow, std::__1::allocator<QuantLib::MarketModelMultiProduct::CashFlow> > > >&)", referenced from:
      vtable for QuantLib::OneStepCoterminalSwaps in BermudanSwaption-a6bf28.o
  "QuantLib::MultiStepCoinitialSwaps::nextTimeStep(QuantLib::CurveState const&, std::__1::vector<unsigned long, std::__1::allocator<unsigned long> >&, std::__1::vector<std::__1::vector<QuantLib::MarketModelMultiProduct::CashFlow, std::__1::allocator<QuantLib::MarketModelMultiProduct::CashFlow> >, std::__1::allocator<std::__1::vector<QuantLib::MarketModelMultiProduct::CashFlow, std::__1::allocator<QuantLib::MarketModelMultiProduct::CashFlow> > > >&)", referenced from:
      vtable for QuantLib::MultiStepCoinitialSwaps in BermudanSwaption-a6bf28.o
  "QuantLib::MultiStepInverseFloater::nextTimeStep(QuantLib::CurveState const&, std::__1::vector<unsigned long, std::__1::allocator<unsigned long> >&, std::__1::vector<std::__1::vector<QuantLib::MarketModelMultiProduct::CashFlow, std::__1::allocator<QuantLib::MarketModelMultiProduct::CashFlow> >, std::__1::allocator<std::__1::vector<QuantLib::MarketModelMultiProduct::CashFlow, std::__1::allocator<QuantLib::MarketModelMultiProduct::CashFlow> > > >&)", referenced from:
      vtable for QuantLib::MultiStepInverseFloater in BermudanSwaption-a6bf28.o
  "QuantLib::MultiStepCoterminalSwaps::nextTimeStep(QuantLib::CurveState const&, std::__1::vector<unsigned long, std::__1::allocator<unsigned long> >&, std::__1::vector<std::__1::vector<QuantLib::MarketModelMultiProduct::CashFlow, std::__1::allocator<QuantLib::MarketModelMultiProduct::CashFlow> >, std::__1::allocator<std::__1::vector<QuantLib::MarketModelMultiProduct::CashFlow, std::__1::allocator<QuantLib::MarketModelMultiProduct::CashFlow> > > >&)", referenced from:
      vtable for QuantLib::MultiStepCoterminalSwaps in BermudanSwaption-a6bf28.o
  "QuantLib::MultiStepCoterminalSwaptions::nextTimeStep(QuantLib::CurveState const&, std::__1::vector<unsigned long, std::__1::allocator<unsigned long> >&, std::__1::vector<std::__1::vector<QuantLib::MarketModelMultiProduct::CashFlow, std::__1::allocator<QuantLib::MarketModelMultiProduct::CashFlow> >, std::__1::allocator<std::__1::vector<QuantLib::MarketModelMultiProduct::CashFlow, std::__1::allocator<QuantLib::MarketModelMultiProduct::CashFlow> > > >&)", referenced from:
      vtable for QuantLib::MultiStepCoterminalSwaptions in BermudanSwaption-a6bf28.o
  "QuantLib::MultiStepPeriodCapletSwaptions::nextTimeStep(QuantLib::CurveState const&, std::__1::vector<unsigned long, std::__1::allocator<unsigned long> >&, std::__1::vector<std::__1::vector<QuantLib::MarketModelMultiProduct::CashFlow, std::__1::allocator<QuantLib::MarketModelMultiProduct::CashFlow> >, std::__1::allocator<std::__1::vector<QuantLib::MarketModelMultiProduct::CashFlow, std::__1::allocator<QuantLib::MarketModelMultiProduct::CashFlow> > > >&)", referenced from:
      vtable for QuantLib::MultiStepPeriodCapletSwaptions in BermudanSwaption-a6bf28.o
  "QuantLib::Error::Error(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, long, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > 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<QuantLib::Quote>::operator->() const in BermudanSwaption-a6bf28.o
      ...
  "QuantLib::detail::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, QuantLib::detail::percent_holder const&)", referenced from:
      calibrateModel(boost::shared_ptr<QuantLib::ShortRateModel> const&, std::__1::vector<boost::shared_ptr<QuantLib::CalibrationHelper>, std::__1::allocator<boost::shared_ptr<QuantLib::CalibrationHelper> > > const&) in BermudanSwaption-a6bf28.o
      _main in BermudanSwaption-a6bf28.o
  "QuantLib::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, 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)

¿He hecho algo mal? ¿Cuál es el problema con el "enlazador" aquí? Me gustaría mucho que me ayudaran, ya que llevo mucho tiempo intentando que esto funcione.

2voto

No puede simplemente compilar BermudanSwaption.cpp y esperar que todo esté bien. Usted tiene que compilar toda la biblioteca QuantLib y enlazar con los archivos de la biblioteca generada. Por favor, busque en Google "compilar y enlazar C++" para obtener más información.

Con mucho, la forma más fácil de hacerlo en Mac es hacerlo con Xcode. Usted tendrá que crear un nuevo proyecto de Xcode, e importar los archivos del proyecto Quantlib en él. A continuación, tendrá que crear una función main(). Xcode hace la compilación y la vinculación para su automáticamente.

En mi captura de pantalla, tengo QuantLib trabajando en Xcode y estaba probando el proceso OU.

enter image description here

1voto

Matt J Puntos 15475

También me he encontrado con una pregunta de este tipo varios minutos antes y me di cuenta de que esta causa de error de la biblioteca estándar establecido por Mac. Uno debe establecer -stdlib=libstdc++ al construir, en comparación con el libc++ por defecto en varias versiones recientes de MAC.

1voto

Steve Puntos 11

@SmallChess lo cubrió en su mayoría aquí .

No se puede esperar que Unix sepa qué es QuantLib y donde es si se introduce -l QuantLib ... QuantLib está escrito en C++ y la biblioteca en sí tiene que ser compilado localmente (es decir, usted tiene que hacerlo usted mismo).

En Xcode tienes que ir a los ajustes de configuración de construcción de C/C++, y añadirlo como una biblioteca. Yo lo haría piense en sólo tendría que introducir " QuantLib "pero depende. Puede que tenga que ir a /usr/include/ , /usr/bin/ , /usr/local/ etc. para ver dónde está y cómo se llama. Es posible que también tenga que proporcionar la ruta completa. También necesitas enlazar boost en Xcode, porque utiliza funciones de ambas bibliotecas.

También puede hacer algo como

echo $CXX 

Y luego

echo $CXXFLAGS

Y esto te dirá el valor de las banderas que estás usando. ¡Sin embargo, no estoy de acuerdo con "De lejos, la forma más fácil de hacerlo en Mac es hacerlo con Xcode", hazlo donde quieras, Xcode, Vim, lo que sea sólo asegúrate de decirle a Clang dónde están las bibliotecas!

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X