冗长的评论,并非真正的答案:某些东西在您的项目中似乎被打破。我使用Eigen 3.2.9作为参考,因为您尚未指定您使用的是哪个版本。在艾根/核心(133),我们有
#if (defined _OPENMP) && (!defined EIGEN_DONT_PARALLELIZE)
#define EIGEN_HAS_OPENMP
#endif
#ifdef EIGEN_HAS_OPENMP
#include <omp.h>
#endif
所以,如果你正确地在你的项目中定义EIGEN_DONT_PARALLELIZE
,EIGEN_HAS_OPENMP
不应被定义和omp.h
不应该包括在内。此外,在Parallelizer.h(30):
#ifdef EIGEN_HAS_OPENMP
if(m_maxThreads>0)
*v = m_maxThreads;
else
*v = omp_get_max_threads();
#else
*v = 1;
#endif
所以,如果你有正确定义EIGEN_DONT_PARALLELIZE
,你不会得到你所得到的错误。
关于C3861的错误,这意味着编译器不能找到omp_get_max_threads
声明(称为Parallelizer.h)。由于该代码被称为#ifdef EIGEN_HAS_OPENMP
内,在核心线路#include <omp.h>
,并omp_get_num_threads
只是包裹在一个#if defined(__cplusplus)
您可以添加在核心或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文件。 –
好的,请尝试#ifdef EIGEN_HAS_OPENMP std :: cout <<“Have EIGEN_HAS_OPENMP \ n”; #endif' –