C++ EXC错误访问错误生成QuantLib C++;Xcode上的程序

C++ EXC错误访问错误生成QuantLib C++;Xcode上的程序,c++,boost,quantlib,C++,Boost,Quantlib,我已经在本地机器(MacOSX10.10.1)上使用clang++构建了Boost(1.57)。我还建立了定量金融图书馆QuantLib。QuantLib引用在其实现中增强 我在XCODEL中创建了一个简单的C++程序来测试QuantLib库。代码如下: #include <iostream> #include <ql/quantlib.hpp> int main(int argc, const char * argv[]) { std::cou

我已经在本地机器(MacOSX10.10.1)上使用clang++构建了Boost(1.57)。我还建立了定量金融图书馆QuantLib。QuantLib引用在其实现中增强

我在XCODEL中创建了一个简单的C++程序来测试QuantLib库。代码如下:

#include <iostream>
#include <ql/quantlib.hpp>

int main(int argc, const char * argv[]) {        
    std::cout << "Hello, World!\n";
    return 0;
}
#0  0x00000001003f73b7 in long double boost::math::detail::erf_imp<long double, boost::math::policies::policy<boost::math::policies::promote_float<false>, boost::math::policies::promote_double<false>, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy> >(long double, bool, boost::math::policies::policy<boost::math::policies::promote_float<false>, boost::math::policies::promote_double<false>, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy> const&, mpl_::int_<64> const&) at /usr/local/include/boost/math/special_functions/erf.hpp:423
#1  0x00000001003f8928 in boost::math::tools::promote_args<long double, float, float, float, float, float>::type boost::math::erf<long double, boost::math::policies::policy<boost::math::policies::promote_float<false>, boost::math::policies::promote_double<false>, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy> >(long double, boost::math::policies::policy<boost::math::policies::promote_float<false>, boost::math::policies::promote_double<false>, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy> const&) [inlined] at /usr/local/include/boost/math/special_functions/erf.hpp:1081
#2  0x00000001003f8916 in boost::math::detail::erf_initializer<long double, boost::math::policies::policy<boost::math::policies::promote_float<false>, boost::math::policies::promote_double<false>, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy>, mpl_::int_<64> >::init::do_init(mpl_::int_<64> const&) at /usr/local/include/boost/math/special_functions/erf.hpp:1009
#3  0x00000001003f987b in boost::math::detail::erf_initializer<long double, boost::math::policies::policy<boost::math::policies::promote_float<false>, boost::math::policies::promote_double<false>, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy>, mpl_::int_<64> >::init::init() [inlined] at /usr/local/include/boost/math/special_functions/erf.hpp:994
#4  0x00000001003f9876 in boost::math::detail::erf_initializer<long double, boost::math::policies::policy<boost::math::policies::promote_float<false>, boost::math::policies::promote_double<false>, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy>, mpl_::int_<64> >::init::init() [inlined] at /usr/local/include/boost/math/special_functions/erf.hpp:995
#5  0x00000001003f9876 in __cxx_global_var_init at /usr/local/include/boost/math/special_functions/erf.hpp:1038
#6  0x00007fff5fc12ceb in ImageLoaderMachO::doModInitFunctions(ImageLoader::LinkContext const&) ()
#7  0x00007fff5fc12e78 in ImageLoaderMachO::doInitialization(ImageLoader::LinkContext const&) ()
#8  0x00007fff5fc0f871 in ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int, ImageLoader::InitializerTimingList&, ImageLoader::UninitedUpwards&) ()
#9  0x00007fff5fc0f806 in ImageLoader::recursiveInitialization(ImageLoader::LinkContext const&, unsigned int, ImageLoader::InitializerTimingList&, ImageLoader::UninitedUpwards&) ()
#10 0x00007fff5fc0f6f8 in ImageLoader::processInitializers(ImageLoader::LinkContext const&, unsigned int, ImageLoader::InitializerTimingList&, ImageLoader::UninitedUpwards&) ()
#11 0x00007fff5fc0f969 in ImageLoader::runInitializers(ImageLoader::LinkContext const&, ImageLoader::InitializerTimingList&) ()
#12 0x00007fff5fc02245 in dyld::initializeMainExecutable() ()
#13 0x00007fff5fc05be1 in dyld::_main(macho_header const*, unsigned long, int, char const**, char const**, char const**, unsigned long*) ()
#14 0x00007fff5fc01276 in dyldbootstrap::start(macho_header const*, int, char const**, long, macho_header const*, unsigned long*) ()
#15 0x00007fff5fc01036 in _dyld_start ()
从另一篇文章来看,我认为这可能是一个Xcode问题,但我没有另一台机器需要验证另一个操作系统。在任何情况下,我都不明白为什么Xcode会在这个级别的代码中产生干扰,所以我认为这可能是由于叮当声,但这只是猜测。如果您能帮助解决此问题或阐明此问题,我们将不胜感激


更新:


删除
#include
允许程序运行。问题是为什么包含此标题会导致Boost中的运行时失败。

您确定可以忽略这些警告吗?警告通常表示可能的UB,UB通常会导致崩溃。我看到了13个类型值转换问题的警告。典型的例子是从unsigned long到int的隐式转换。但这在QuantLib库代码中,而不是在Boost库中。您使用的库依次使用Boost,如果它做了不应该做的事情,那么问题可能会在Boost中表现出来。例如,如果你看一下堆栈跟踪,再上几层,你就不再使用Boost了。你是用同样的方式编译库和程序吗?当库被编译为C++03,程序被编译为C++11(或者可能是相反)时,有这样的错误报告;请参阅@LuigiBallabio,是的,我使用相同的编译器和开关编译库和程序。
  else
  {
     // Max Error found at long double precision =   1.623299e-20
     // Maximum Deviation Found:                     4.326e-22
     // Expected Error Term:                         -4.326e-22
     // Maximum Relative Change in Control Points:   1.474e-04
     static const T Y = 1.044948577880859375f;
     static const T P[] = {


/** THREAD EXCEPTION HERE **/        
BOOST_MATH_BIG_CONSTANT(T, 64, 0.0834305892146531988966),// FAILS HERE WITH EXC_BAD_ACCESS    


        BOOST_MATH_BIG_CONSTANT(T, 64, -0.338097283075565413695),
        BOOST_MATH_BIG_CONSTANT(T, 64, -0.0509602734406067204596),
        BOOST_MATH_BIG_CONSTANT(T, 64, -0.00904906346158537794396),
        BOOST_MATH_BIG_CONSTANT(T, 64, -0.000489468651464798669181),
        BOOST_MATH_BIG_CONSTANT(T, 64, -0.200305626366151877759e-4),
     };
     static const T Q[] = {    
        BOOST_MATH_BIG_CONSTANT(T, 64, 1.0),
        BOOST_MATH_BIG_CONSTANT(T, 64, 0.455817300515875172439),
        BOOST_MATH_BIG_CONSTANT(T, 64, 0.0916537354356241792007),
        BOOST_MATH_BIG_CONSTANT(T, 64, 0.0102722652675910031202),
        BOOST_MATH_BIG_CONSTANT(T, 64, 0.000650511752687851548735),
        BOOST_MATH_BIG_CONSTANT(T, 64, 0.189532519105655496778e-4),
     };
     result = z * (Y + tools::evaluate_polynomial(P, T(z * z)) / tools::evaluate_polynomial(Q, T(z * z)));
  }