1
私は<lapacke.h>
が含まれていない場合は、私は次のエラーを取得する:私は<lapacke.h>
を含む場合ブーストと競合するラッパー?
test.cpp:20:23: error: ‘LAPACK_ROW_MAJOR’ was not declared in this scope
LAPACKE_dsyev(LAPACK_ROW_MAJOR, jobz, uplo, N, &a[0], lda, &work[0]);
^
test.cpp:20:76: error: ‘LAPACKE_dsyev’ was not declared in this scope
LAPACKE_dsyev(LAPACK_ROW_MAJOR, jobz, uplo, N, &a[0], lda, &work[0]);
はしかし、私はboost
と競合エラーの長いリストを取得します。これは私が使用している唯一のboost
アイテムであるため、これは<boost/algorithm/string.hpp>
を含むものと結びついていると思います。
lapacke
とboost
との競合はありますか? <boost/algorithm/string.hpp>
を残してもうまくコンパイルされますが、より包括的なコードはその組み込みに依存しています。次のように
この問題の最小の例である:
TEST.H:
#include <lapacke.h>
#include <boost/algorithm/string.hpp>
#include <vector>
TEST.CPP:
#include "test.h"
void eig(std::vector<double> A, std::vector<double>& evecs, std::vector<double>&evals) {
int N = (int)A.size();
if(N == 6) {
/// A is a 3x3 symmetric tensor
char jobz = 'V';
char uplo = 'L';
int N = 3;
int lda = 3;
int lwork = 15;
double work[lwork];
double a[9] = {
A[0], A[3], A[4],
A[3], A[1], A[5],
A[4], A[5], A[2]
};
LAPACKE_dsyev(LAPACK_ROW_MAJOR, jobz, uplo, N, &a[0], lda, &work[0]);
evals[0] = work[0];
evals[1] = work[1];
evals[2] = work[2];
for(int i = 0; i < 9; i++) {
evecs[i] = a[i];
}
} else {
fprintf(stderr, "ERROR: Unknown size of A in eig\n");
}
}
int main(int argc, char** argv) {
return 0;
}
のMakefile:
all: test.exe
CC=g++ -std=c++11
OPTS= -O3 -Wall
LIBS= -lm -L/usr/lib/lapack -llapacke -llapack -lblas -lcblas
test.exe: $(OBJS) test.cpp
$(CC) $(OBJS) $(DEFS) $(OPTS) test.cpp -o test.exe $(LIBS)
clean:
rm -rf *.o
表示されているエラーの例を挙げることはできますか? –