【问题标题】:how to include "omp.h" without specifying exact path on OS X如何在 OS X 上包含“omp.h”而不指定确切路径
【发布时间】:2015-07-23 02:28:03
【问题描述】:

我可以使用构建我的项目

#include "/usr/local/Cellar/libiomp/20150401/include/libiomp/omp.h"

还有set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -fopenmp")在 CMakeLists.txt 中

但是我应该怎么处理#include <omp.h>

当我brew list 时,我安装了clang-omp、libivmp、gcc。我通过使用 locate omp.h 找到了 omp.h。

还有我的gcc -v 打印:

Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-apple-darwin14.4.0/5.1.0/lto-wrapper
Target: x86_64-apple-darwin14.4.0
Configured with: ../gcc-5.1.0/configure --enable-languages=c++,fortran
Thread model: posix
gcc version 5.1.0 (GCC)

提前致谢。

【问题讨论】:

  • GCC 带有自己的 OpenMP 实现 (libgomp),并且在指定 -fopenmp 时会自动添加其 omp.h 的路径。据我所知,您希望链接到英特尔 OpenMP 运行时,该运行时提供与 libgomp API 的兼容层。您应该能够在 编译时 简单地使用 -fopenmp#include <omp.h> 然后链接到 IOMP 没有 -fopenmp 标志(如果 GCC 也用作链接器)。

标签: c++ macos gcc cmake openmp


【解决方案1】:

您应该能够使用 C 或 C++ 编译器的命令行选项来执行此操作:

-I /usr/local/Cellar/libiomp/20150401/include/libiomp

-I 和路径可选之间的空格)在编译器命令行上。您很可能有一个变量将/usr/local/Cellar/libiomp/20150401 标识为安装OMP 代码的位置,因为您可能还需要一个选项-L /usr/local/Cellar/libiomp/20150401/lib(再次为空格)来在链接时获取库。

在您的 CMakeLists.txt 文件中修复该问题需要单独讨论,但您可能会找到一些有助于解决问题的示例。

【讨论】:

  • Hn.. 谢谢。我认为 brew 安装后可能有一个环境变量或其他东西。
  • 不要忘记:带空格的目录和文件名。在这种情况下,他的路径需要以" (quote) 开始和结束,否则路径会被分成多个参数。
  • @Youka:哪个空间?问题中引用的名称中没有空格。是的,理论上你是对的。实际上,编写程序的人通常假设路径名中没有空格。我曾经有一个目录External Source Repositories,其中包含各种 SVN、Git 和 Mercurial 克隆。并没有持续多久;没有任何自动没收的软件(使用autoconf 和亲戚的代码)处理其中包含空格的路径名。该目录现在是External-Source-Repositories。我不是在谈论有问题的破旧的三流项目;这些都是主流的 FLOSS 项目。
猜你喜欢
  • 2014-11-17
  • 2016-03-16
  • 2015-03-12
  • 2011-01-27
  • 1970-01-01
  • 1970-01-01
  • 2017-09-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多