' omp.h'使用clang编译时找不到文件

时间:2015-10-28 19:56:31

标签: c++ linux openmp clang++

我试图在运行linux mint的笔记本电脑上使用clang(3.7.0)设置一个OpenMP项目。

现在我已经读过OpenMP不会立即得到支持,因此我按照本教程https://clang-omp.github.io/将openMP集成到了clang中。

我克隆了源代码,设置了环境变量并将-fopenmp标志设置为我的项目,但我仍然收到错误"致命错误:' omp.h'找不到文件"在建设时。

我的猜测是我设置了环境变量错误。有没有办法检查我是否把它们放在正确的位置?我刚刚将它们复制到.bashrc文件中。

编辑: 当我运行$ locate omp.h时,我得到:

        ...
        currID = i.toString() + "-" + j.toString();

            switch(j % 3){
                case 0:

                    var currItem = document.createElement('input');
                    currItem.setAttribute("id", currID);
                    currItem.value = builerObj.dataArray[2][week][i][0];
                    currItem.addEventListener("change", function(){
                        updatePlanner(document.getElementById(currID).value, week, i, 0);
                    });
                    break;
                    ...

这是我的makefile:

/usr/include/re_comp.h
/usr/include/linux/ppp-comp.h
/usr/include/linux/seccomp.h
/usr/include/net/ppp-comp.h
/usr/include/openssl/comp.h
/usr/lib/gcc/x86_64-linux-gnu/4.8/include/omp.h
/usr/lib/perl/5.18.2/CORE/regcomp.h
/usr/src/linux-headers-3.13.0-24/arch/arm/include/asm/seccomp.h
/usr/src/linux-headers-3.13.0-24/arch/microblaze/include/asm/seccomp.h
/usr/src/linux-headers-3.13.0-24/arch/mips/include/asm/seccomp.h
/usr/src/linux-headers-3.13.0-24/arch/powerpc/include/uapi/asm/seccomp.h
/usr/src/linux-headers-3.13.0-24/arch/s390/include/asm/seccomp.h
/usr/src/linux-headers-3.13.0-24/arch/sh/include/asm/seccomp.h
/usr/src/linux-headers-3.13.0-24/arch/sparc/include/asm/seccomp.h
/usr/src/linux-headers-3.13.0-24/arch/x86/include/asm/seccomp.h
/usr/src/linux-headers-3.13.0-24/include/linux/ppp-comp.h
/usr/src/linux-headers-3.13.0-24/include/linux/seccomp.h
/usr/src/linux-headers-3.13.0-24/include/net/ipcomp.h
/usr/src/linux-headers-3.13.0-24/include/uapi/linux/ppp-comp.h
/usr/src/linux-headers-3.13.0-24/include/uapi/linux/seccomp.h
/usr/src/linux-headers-3.13.0-24-generic/include/config/seccomp.h
/usr/src/linux-headers-3.13.0-24-generic/include/config/crypto/pcomp.h
/usr/src/linux-headers-3.13.0-24-generic/include/config/inet/ipcomp.h
/usr/src/linux-headers-3.13.0-24-generic/include/config/inet6/ipcomp.h
/usr/src/linux-headers-3.13.0-24-generic/include/config/isdn/ppp/bsdcomp.h
/usr/src/linux-headers-3.13.0-24-generic/include/config/ppp/bsdcomp.h
/usr/src/linux-headers-3.13.0-24-generic/include/config/xfrm/ipcomp.h
/usr/src/linux-headers-3.13.0-24-generic/include/linux/ppp-comp.h
/usr/src/linux-headers-3.13.0-24-generic/include/linux/seccomp.h

3 个答案:

答案 0 :(得分:6)

在Clang 3.7中支持OpenMP ,但您可能需要启用它,请参阅here

  

完全支持OpenMP 3.1,但默认情况下禁用。要启用它,   请使用-fopenmp = libomp命令行选项。

另请参阅Status of supported OpenMP constructs了解更多精确度。

所以你不必再克隆clang-omp项目了。

您为项目使用什么构建系统以及编译时会出现哪些错误?

如果您使用 Makefile :请不要忘记添加-fopenmp标记。

如果您使用 CMake :您还应该使用FindOpenMP module查找正确的OpenMP标记并相应地添加它们。

如果仍然遇到包含错误,那么您的omp.h头文件可能不在clang默认搜索路径中。所以你应该尝试包含gcc附带的那个并添加-I/usr/lib/gcc/x86_64-linux-gnu/4.8/include/

所以在你的情况下你应该添加这一行:

CFLAGS = -std=c+11 [etc...]
CFLAGS += -I/usr/lib/gcc/x86_64-linux-gnu/4.8/include/
LINKER = [etc...]

答案 1 :(得分:4)

' omp.h'是" Mint" libgcc- [版本] -dev。 (基于RPM的操作系统将此标头放在不同的包中,例如libgomp - *)

示例libgcc-4.8-dev:/usr/lib/gcc/x86_64-linux-gnu/4.8/include/omp.h

解决方案:安装默认gcc的版本:$ gcc --version

答案 2 :(得分:0)

万一有人遇到我遇到的情况-从源代码构建Clang-一种解决方案是:

  1. 确保通过在CMake调用中将openmp子项目添加到LLVM_ENABLE_PROJECTS来构建子项目
  2. 使用cmake --build . --target omp构建该子项目
  3. 将生成的omp.h从build / projects / openmp / runtime / src / omp.h复制到build / lib / clang / 10.0.0 / include,该文件位于新建的clang的默认搜索路径中。

我以前使用了“将gcc的omp.h路径添加到每个构建命令中”的方法,但是发现这更容易。