我是C的新手,在OS X中编译代码时遇到了一些问题。
我在Eclipse中编写了很多Java代码并使用终端来编译我的代码。但是现在我正在学习openMP并且遇到麻烦。
首先我下载了Xcode来编写openMP代码,但它无法识别<omp.h>
。然后我安装了g++
。当我在终端输入g++ -v
时,我得到了这个:
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
Target: x86_64-apple-darwin13.3.0
Thread model: posix
但是当我使用g++ Mesh.cpp -fopenmp
时,我仍然会得到
Mesh.cpp:4:10: fatal error: 'omp.h' file not found
#include <omp.h>
^
1 error generated.
然后我尝试将PTP安装到Eclipse中并遇到同样的问题。
我以为我的MacBook中没有omp.h
所以我搜索了它,并在omp.h
下的文件夹下找到了几个gcc-4.9.1/build/
。
这就是问题所在。根据Java经验,我拥有该文件但无法使用它的唯一原因是类路径错误。但是,我不知道如何在g ++,Xcode或Eclipse中更改此配置。但由于我可以包含<stdio.h>
之类的文件并使用所有IDE编译它,我怎能不对<omp.h>
执行相同的操作?
我注意到的另一件事是gcc文件夹版本是4.9.1
,但是当我在终端输入gcc -v
时,我会在输入g++ -v
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
Target: x86_64-apple-darwin13.3.0
Thread model: posix
版本信息不应该说明4.9.1
的内容吗?就像java -version
显示
java version "1.8.0_11"
Java(TM) SE Runtime Environment (build 1.8.0_11-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.11-b03, mixed mode)
感谢阅读。任何帮助表示赞赏。
答案 0 :(得分:20)
此命令可以帮助您
brew install libomp
brew info libomp
libomp: stable 6.0.1 (bottled)
LLVM's OpenMP runtime library
https://openmp.llvm.org/
/usr/local/Cellar/libomp/6.0.1 (12 files, 1.2MB) *
Poured from bottle on 2018-11-20 at 16:12:22
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/libomp.rb
==> Dependencies
Build: cmake ✘
==> Requirements
Required: macOS >= 10.10 ✔
==> Caveats
On Apple Clang, you need to add several options to use OpenMP's front end
instead of the standard driver option. This usually looks like
-Xpreprocessor -fopenmp -lomp
You might need to make sure the lib and include directories are discoverable
if /usr/local is not searched:
-L/usr/local/opt/libomp/lib -I/usr/local/opt/libomp/include
For CMake, the following flags will cause the OpenMP::OpenMP_CXX target to
be set up correctly:
-DOpenMP_CXX_FLAGS="-Xpreprocessor -fopenmp -I/usr/local/opt/libomp/include" -DOpenMP_CXX_LIB_NAMES="omp" -DOpenMP_omp_LIBRARY=/usr/local/opt/libomp/lib/libomp.dylib
答案 1 :(得分:13)
GCC 4.9.1通常不附带OS X(实际上没有GCC随Xcode一起提供)。您的必须通过其他方式安装,例如如[{3}}所描述的自制或自编译。您可能缺少的是正确设置PATH
变量或者额外安装的编译器具有版本后缀的二进制文件,即gcc-4.9
或g++-4.9
,而不仅仅是gcc
/ {{1} }。
正如@rubenvb已经提到的,Apple将符号类似GCC的Clang可执行文件符号链接。我个人发现,自Xcode附带的最新Clang版本以来,一些不好的做法会对无法识别的命令行选项(例如GCC前端特定版本)产生严重错误。
答案 2 :(得分:12)
gcc
和g++
命令不是你认为的XCode命令:Apple认为将Clang伪装成GCC以使转换更顺畅是一个好主意。
Clang OpenMP支持仍在继续。如果我没有错过任何重要版本的WIP代码,您需要构建this version of clang并使用它。
您当然可以通过自制软件或macports之类的东西来安装真正的GCC,这将通过OpenMP支持。
答案 3 :(得分:6)
MacOS似乎包含了该库,但是如果仅使用以下代码,则XCode找不到它:
#include <omp.h>
但是,如果您尚未安装该库,则可以通过使用HomeBrew安装它来简单地添加它:
brew install libomp
完成此操作后,只需用以下内容替换库包含代码:
#include "/usr/local/opt/libomp/include/omp.h"
或使用brew安装libomp后终端显示的路径。
答案 4 :(得分:3)
omp.h
文件已移动到子目录。我在MacPorts中找到了它,并通过创建指向该文件的链接来解决了该编译问题:
sudo ln -s /opt/local/include/libomp/omp.h /opt/local/include/omp.h