長いコメント、本当に答えはありません:あなたのプロジェクトで何かが壊れているようです。使用しているバージョンを指定していないので、Eigen 3.2.9を参照として使用しています。あなたが適切にあなたのプロジェクトでEIGEN_DONT_PARALLELIZE
を定義した場合固有/コア(133)私たちはそう
#if (defined _OPENMP) && (!defined EIGEN_DONT_PARALLELIZE)
#define EIGEN_HAS_OPENMP
#endif
#ifdef EIGEN_HAS_OPENMP
#include <omp.h>
#endif
を持っていて、EIGEN_HAS_OPENMP
を定義するべきではないとomp.h
が含まれるべきではありません。また、Parallelizer.h(30)に:あなたが適切EIGEN_DONT_PARALLELIZE
を定義していた場合
#ifdef EIGEN_HAS_OPENMP
if(m_maxThreads>0)
*v = m_maxThreads;
else
*v = omp_get_max_threads();
#else
*v = 1;
#endif
だから、あなたはあなたが取得しているエラーを取得されません。 C3861のエラーについて
、それはコンパイラが(Parallelizer.hに呼ばれる)omp_get_max_threads
の宣言を見つけることができないことを意味します。コア内のライン#include <omp.h>
で、omp_get_num_threads
だけ#if defined(__cplusplus)
に包まれているように、そのコードは#ifdef EIGEN_HAS_OPENMP
内で呼び出されるとして、あなたはコードがアクティブであることを確認するために、Coreまたはomp.hにチェックを追加することができ
// This is in Eigen/Core
#ifdef EIGEN_HAS_OPENMP
static_assert(0, "OMP FILE IS INCLUDED IN CORE...");
#include <omp.h>
#endif
// This is in omp.h
static_assert(0, "OMP FILE IS PROPERLY INCLUDED...");
_OMPIMP int _OMPAPI
omp_get_num_threads(
void
);
ompが正しく読み込まれていれば、両方のエラーが発生するはずです。
実際にompがあることを確認してください。 '#ifdef _OPENMPを追加します std :: cout <<" OMPを持ってください "<< _OPENMP <<" \ n "; #endif' –
入力いただきありがとうございます!あなたのスニペットを使って、私は "Have OMP200203"を得ます:-)プロジェクトがすでにopenmpを他の目的のために使っているので、大きな驚きはありません。 omp.hを含むより多くのファイルがあり、C:\ Program Files(x86)\ Microsoft Visual Studio 11.0 \ VC \ includeのファイルが正しく含まれているようです。 –
OK、#ifdef EIGEN_HAS_OPENMP std :: cout << "EIGEN_HAS_OPENMPを持っていますか?"; #endif' –