C++ EXC错误访问错误生成QuantLib C++;Xcode上的程序
我已经在本地机器(MacOSX10.10.1)上使用clang++构建了Boost(1.57)。我还建立了定量金融图书馆QuantLib。QuantLib引用在其实现中增强 我在XCODEL中创建了一个简单的C++程序来测试QuantLib库。代码如下: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
#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)));
}