I'm using Boost.QVM and boost::multiprecision::cpp_dec_float_50
as my scalar for my quaternion.
I tried my program with double
instead of boost::multiprecision::cpp_dec_float_50
and it worked, so I believe it is the cause of the problem.
#include <bits/stdc++.h>
#include <boost/numeric/odeint.hpp>
#include <boost/multiprecision/cpp_dec_float.hpp>
#include <boost/qvm.hpp>
using namespace std;
namespace boost { namespace qvm {
template <> struct is_scalar<boost::multiprecision::cpp_dec_float_50> { static bool const value=true; };
}
}
typedef boost::multiprecision::cpp_dec_float_50 value_type;
typedef boost::qvm::mat<value_type, 3, 3> matrix;
typedef boost::qvm::vec<value_type,3> triple;
typedef boost::qvm::quat<value_type> quaternion;
int main()
{
quaternion q = {1,1,1,1};
boost::qvm::normalize(q);
}
The error I got is:
/usr/bin/ld: /tmp/ccGMS28g.o: in function `boost::qvm::enable_if_c<boost::qvm::is_quat<boost::qvm::quat<boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<50u, int, void>, (boost::multiprecision::expression_template_option)1> > >::value, void>::type boost::qvm::normalize<boost::qvm::quat<boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<50u, int, void>, (boost::multiprecision::expression_template_option)1> > >(boost::qvm::quat<boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<50u, int, void>, (boost::multiprecision::expression_template_option)1> >&)':
test2.cpp:(.text._ZN5boost3qvm9normalizeINS0_4quatINS_14multiprecision6numberINS3_8backends13cpp_dec_floatILj50EivEELNS3_26expression_template_optionE1EEEEEEENS0_11enable_if_cIXsrNS0_7is_quatIT_EE5valueEvE4typeERSD_[_ZN5boost3qvm9normalizeINS0_4quatINS_14multiprecision6numberINS3_8backends13cpp_dec_floatILj50EivEELNS3_26expression_template_optionE1EEEEEEENS0_11enable_if_cIXsrNS0_7is_quatIT_EE5valueEvE4typeERSD_]+0x25e): undefined reference to `boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<50u, int, void>, (boost::multiprecision::expression_template_option)1> boost::qvm::sqrt<boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<50u, int, void>, (boost::multiprecision::expression_template_option)1> >(boost::multiprecision::number<boost::multiprecision::backends::cpp_dec_float<50u, int, void>, (boost::multiprecision::expression_template_option)1>)'
collect2: error: ld returned 1 exit status