c - "undeclared"命令中的变量 "#pragma"?

标签 c gcc openmp c-preprocessor

我正在编译 Blender 的一个分支3D建模程序from source (使用 SCONS ),在 Fedora 8 机器上,我遇到了一个错误,我没有遇到在 CentOS 5 机器上编译相同的源代码,我认为它与变量定义有关。错误是:

source/blender/blenkernel/intern/implicit.c: In function ‘mul_bfmatrix_lfvector’:
source/blender/blenkernel/intern/implicit.c:592: error: ‘CLOTH_OPENMP_LIMIT’ undeclared (first use in this function)
source/blender/blenkernel/intern/implicit.c:592: error: (Each undeclared identifier is reported only once
source/blender/blenkernel/intern/implicit.c:592: error: for each function it appears in.)
source/blender/blenkernel/intern/implicit.c: In function ‘cloth_calc_force’:
source/blender/blenkernel/intern/implicit.c:1700: error: ‘CLOTH_OPENMP_LIMIT’ undeclared (first use in this function)

implicit.c 文件确实定义了该变量;这是文件的前几行:

#include "MEM_guardedalloc.h"

#include "BKE_cloth.h"

#include "DNA_object_force.h"

#include "BKE_effect.h"
#include "BKE_global.h"
#include "BKE_utildefines.h"

#include "BLI_threads.h"

#define CLOTH_OPENMP_LIMIT 25

#ifdef _WIN32
#include <windows.h>
static LARGE_INTEGER _itstart, _itend;
static LARGE_INTEGER ifreq;

抛出错误的两行是:

#pragma omp parallel sections private(i) if(vcount > CLOTH_OPENMP_LIMIT)

#pragma omp parallel for private(i) if(numverts > CLOTH_OPENMP_LIMIT)

我猜这个错误是由于编译器以及它在编译中定义变量时如何处理的,而且由于 Fedora 8 有点过时,它可能有一些旧版本的编译器把它搞砸了。任何人都知道如何绕过这个显示为“未声明”的变量?

最佳答案

该编译器不支持 OpenMP。这是第一次提到OpenMP和GCC

2006 年 3 月 9 日

...因此从 GCC 4.2 开始,编译器支持 OpenMP v2.5 规范。

这里的提示是,根据预处理器错误,很明显该值已定义,但 #pragma ... 行找不到该定义。一旦您意识到代码使用了非标准的#pragma 编译器指令,编译器就会成为主要嫌疑人。

关于c - "undeclared"命令中的变量 "#pragma"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3293610/

相关文章:

c++ - 为什么参数不是常量表达式?

c++ - 是否可以关闭 gcc 的自动并行化?

Linux 程序集 "collect2: ld returned 1 exit status"

c++ - 在 Mingw 64 位上使用 Clang

c++ - openmp 循环结果归零

c - 使用 omp 减少嵌套循环

c - 从C中的文件夹中获取一定数量的元素

c - 向我的小游戏添加功能时出现奇怪错误 (0xC0000005)

c - 为什么变量声明的顺序很重要?

c - 如何在 Linux 中使用 addr2line 命令?