Я пытаюсь скомпилировать сборку для разработки, и я получаю эту ошибку во время компиляции:
имя неизвестного типа 'dgeqp3'
функция не может возвращать тип функции 'void ( int *, int *, double *, int *, int *, double *, double *, int *, int *) '
использование необъявленного идентификатора' dgeqp3 '
Файл, который вызывает ошибку, является arma_extra. C, который должен быть дополнением к Armadillo (библиотека C ++ для линейной алгебры и вычислений scientifi c). Первые несколько строк (вам лучше поверить, что я получаю те же сообщения об ошибках для zqep3):
#include <cassert>
#include <sstream>
#include "arma_extra.h"
#ifdef DEVBUILD
#include <DEVBUILD.h>
#undef dgeqp3
#undef zgeqp3
#endif
/*!
* Convert an integer to a string.
*/
#define SSTR( x ) static_cast< std::ostringstream & >( \
( std::ostringstream() << std::dec << x ) ).str()
extern "C" {
void arma_fortran_noprefix(dgeqp3)(int*,int*,double*,int*,int*,double*,double*,int*,int*);
void arma_fortran_noprefix(zgeqp3)(int*,int*,std::complex<double>*,int*,int*,std::complex<double>*,std::complex<double>*,int*,double*,int*);
}
dgeqp3 - это функция LAPACK (библиотека Фортрана 90 для линейной алгебры), так что похоже, что Армадилло пытается использовать некоторые функции из LAPACK. Я не знаком с объявлением функции в форме
data_type my_function(what's this)(int,...);
Я предполагаю, что это своего рода обтекание, следовательно внешний "C" для предотвращения перегрузки функции?
Но я прочитал в другом месте , что этот вид синтаксиса запрещен, поскольку функции не могут возвращать функции. Действительно, это, кажется, второе из трех сообщений об ошибках, которые я получаю. Я немного отчаялся, поэтому любая помощь будет очень признательна.