Недавно я сделал все возможное, чтобы настроить числовые привязки boost, чтобы позволить мне использовать LAPACK с C++, но я столкнулся с некоторыми препятствиями. Во-первых, я подтвердил, что boost работает нормально, поэтому это связано с моими библиотеками LAPACK или с числовыми привязками boost.Ошибки с использованием форсированных числовых привязок и вызова lapack для gesvd
Вот немного кода, чтобы проверить то, что я пытаюсь сделать:
#include <boost/numeric/ublas/vector.hpp>
#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/io.hpp>
#include <boost/numeric/bindings/lapack/gesvd.hpp>
#include <boost/numeric/bindings/traits/ublas_matrix.hpp>
//#include <boost/numeric/bindings/traits/ublas_vector2.hpp>
//#include <boost/numeric/bindings/traits/matrix_traits.hpp>
typedef boost::numeric::ublas::matrix<int> iMatrix;
typedef boost::numeric::ublas::matrix<double> dMatrix;
typedef boost::numeric::ublas::vector<int> iVector;
typedef boost::numeric::ublas::vector<double> dVector;
namespace ublas = boost::numeric::ublas;
namespace lapack = boost::numeric::bindings::lapack;
void function() {
int n = 10;
dMatrix jacobi(n,n); // then actually initialize it
dVector eigenvals(n);
dMatrix eigenvects(n);
dVector work(n);
int error = lapack::gesvd('N', 'A', jacobi, eigenvals, eigenvects, work);
std::cout << eigenvals << std::endl;
}
Сейчас, пока я не 100% правильно, что этот код должен компилироваться, когда все настроено правильно, ошибки я «Я получаю, когда строю, кажется, не имеет большого смысла для меня.
- В файле включен в C: \ MinGW \ повышающего \ boost_1_57_0/повышающего/сериализации/tracking.hpp: 20: 0,
- В файле включен в C: \ MinGW \ импульс \ boost_1_57_0/повышающей/сериализаций /tracking.hpp:20:0,
- .............
- из .. \ Solver.cpp: 6:
- C: \ MinGW \ импульс \ boost_1_57_0/boost/numeric/bindings/traits/ublas_matrix.hpp: при создании 'struct boost :: numeric :: bindings :: traits :: matrix_detail_traits, boost :: numeric :: ublas :: matrix>':
- C: \ MinGW \ boost \ boost_1_57_0/boost/numeric/bindings/traits/matrix_traits.hpp: 48: 10: требуется от 'struct boost :: numeric :: bindings :: traits :: matrix_traits>'
- C: \ MinGW \ boost \ boost_1_57_0/boost/numeric/bindings/lapack/gesvd.hpp: 167: 7: требуется от 'int boost :: numeric :: bindings :: lapack :: gesvd (char, char, char, MatrA &, ЗВТ & Матру &, MatrV &) '
- C: \ MinGW \ импульс \ boost_1_57_0/повышающего/цифровой/привязок/LaPack/gesvd.hpp: 477: 50: требуется от ВНУТР повышения :: числовыми :: привязок: : lapack :: gesvd (char, char, MatrA &, VecS &, MatrU &, MatrV &) '
- .. \ Solver.cpp: 85: 77: требуется отсюда
- C: \ MinGW \ boost \ boost_1_57_0/boost/numeric/bindings/traits/ublas_matrix.hpp: 46: 5: ошибка: недействительное приложение ' SizeOf»неполного типа 'повышение :: STATIC_ASSERTION_FAILURE'
- BOOST_STATIC_ASSERT ((повышение :: is_same <
Опять же, я испытал, что импульс и ublas сам по себе работает отлично. Когда я комментирую строку кода lapack::gesvd
, все компилируется и работает нормально. Насколько я могу судить, эти ошибки означают, что я правильно связал LAPACK с программой (нет неразрешенных символов), и моя программа может найти правильные файлы привязки (вызов lapack::gesvd
возвращает другую ошибку, если вы ее неправильно вход). Поэтому я в недоумении.
Я нахожусь в Windows 64 бит, используя Eclipse, C++, boost, ublas и LAPACK. Информацию о форсировании числовых привязок к LAPACK можно найти здесь: http://git.tiker.net/boost-numeric-bindings.git/blob_plain/be4a548307f3e95786acb3487e571bdffe738e4a:/libs/numeric/bindings/lapack/doc/index.html
Любые советы относительно общего процесса компоновки/компиляции с использованием форсированных числовых привязок + LAPACK. Я, честно говоря, не смог найти хороших примеров в Интернете.