2016-04-23 13 views
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>を含むものと結びついていると思います。

lapackeboostとの競合はありますか? <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 
+0

表示されているエラーの例を挙げることはできますか? –

答えて

0

はそうこれはincluに敏感かもしれません注文する。最初にそのようなブーストライブラリを含む試してみてください。私にとって

#include <boost/algorithm/string.hpp> 
#include <lapacke.h> 
#include <vector> 

、それがコンパイルされ、この構成で実行されていました(ただし、lapackeが最初に含まれている場合はコンパイルされませんでした)。

関連する問題