我试图在运行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
答案 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-一种解决方案是:
openmp
子项目添加到LLVM_ENABLE_PROJECTS
来构建子项目cmake --build . --target omp
构建该子项目omp.h
从build / projects / openmp / runtime / src / omp.h复制到build / lib / clang / 10.0.0 / include,该文件位于新建的clang的默认搜索路径中。 我以前使用了“将gcc的omp.h路径添加到每个构建命令中”的方法,但是发现这更容易。