8

我目前正在尝试在 MacOS 10.9 上使用 Cmake 构建 Cuda 项目。我的 C 和 C++ 编译器是 gcc,但似乎因为 Mavericks gcc 和 g++ 链接到 clang,CUDA 不支持。

有没有人找到一个很好的解决方案来使用真正的 gcc,或者在没有“dumpspecs”的情况下让 clang 工作?

4

6 回答 6

7

10.9 的问题gcc实际上是铿锵声。请尝试最新的 CUDA 工具包并明确指出 NVCC 使用 /usr/bin/clang (nvcc -ccbin /usr/bin/clang)。这样NVCC就会知道它正在处理clang。

于 2013-10-14T15:34:00.850 回答
4

这是 Eugene 提供的答案的扩展:

Mac OSX 10.9 的 CUDA 工具包下载已发布到CUDA 下载页面

它在 10.9 上支持 XCode 5,并且会自动使用 clang 而不是 gcc,仅供参考。

如果您在 10.8 上使用 XCode 5,请参阅发行说明

· 在 Mac OS X 10.8 上,如果您安装 XCode 5,包括命令行工具,gcc 编译器将被 clang 取代。您可以使用 --ccbin /usr/bin/clang 选项从命令行继续成功编译 nvcc,该选项指示 nvcc 使用 clang 编译器而不是 gcc 来编译传递给它的任何主机代码。但是,当使用 NSight Eclipse Edition 构建时,此解决方案将不起作用。可以从命令行和 NSight Eclipse 版一起使用的替代解决方案是在安装 XCode 5 后从 Apple Developer 网站下载旧版本的命令行工具包,这会将 gcc 重新安装到 /usr/bin . 为此,请访问

http://developer.apple.com/downloads/index.action

使用您的 Apple ID 登录,然后使用屏幕左侧的搜索窗格搜索命令行工具。

于 2013-10-27T02:26:34.350 回答
2

这个问题实际上在 OS X Mavericks 之前就已经存在,我对 Moutain Lion 也有同样的问题,而 Eugene 的回答是 100% 正确的。

但是,自从升级到 Mavericks 后,我的 Geforce 卡似乎没有被识别为支持 CUDA 的设备,而且使用使用 CUDA 的软件的人似乎也遇到了同样的问题。

所以最好不要马上更新

于 2013-10-24T21:17:27.827 回答
1

我刚刚下载了 CUDA 5.5,安装在 Mac OSX 10.8.5 下,带有 Xcode 5.0.2,并在 Xcode 中更新了命令行工具。但我无法编译 CUDA 示例“nbody”。我收到了各种有趣的错误信息,比如

clang 错误:不支持的选项 '-dumpspecs'
我以为我已经通过其他一些网页的帮助解决了这个问题,但随后其他问题不断出现(例如,GLEW 未找到,CUDA 示例路径未定义,...)。(而且提供的 makefile 和 cmake 文件似乎太做作了,所以我找不到错误。)

所以我推出了自己的makefile。我把它贴在这里,希望它可以帮助其他人节省一些时间。

    #!/usr/bin/make -R

    # 用于 CUDA 示例程序的简单 Makefile
    # (因为提供的那些不起作用!:-( )
    #
    # 我们假设这个目录中的所有文件都产生一个可执行文件。
    # 在下面的变量 NVCC 中设置你的 GPU 版本
    #
    # 在Mac OS X 10.8.5下开发测试;
    # 在Linux 下,你可能需要调整一些路径、编译器选项和#ifdef。
    #
    # 先决条件:
    # - CUDA 5.5
    # - 通过 XCode 5 安装的“命令行工具”
    # - DYLD_FALLBACK_LIBRARY_PATH 或 DYLD_LIBRARY_PATH 必须包括
    # /Developer/NVIDIA/CUDA-5.5/lib:/Developer/NVIDIA/CUDA-5.5/samples/common/lib/darwin
    #
    # 广州 2013 年 12 月


    # -------- 变量和设置 ---------
    #

    CUDA := /Developer/NVIDIA/CUDA-5.5

    NVCC := nvcc -ccbin /usr/bin/clang -arch=sm_30 --compiler-options -Wall,-ansi,-Wno-extra-tokens
    # OSX 10.8 下的 XCode 5 需要 -ccbin /usr/bin/clang
    # 我的笔记本电脑需要 -arch=sm_30(它不提供 sm_35)

    INCFLAGS := -I $(CUDA)/samples/common/inc

    目标:= nbody

    OBJDIR := 对象

    制造标志:= kR

    .后缀:.cu .cpp .h

    ALLSOURCES := $(通配符 *.cu *.cpp)
    ALLFILES := $(basename $(ALLSOURCES))
    ALLOBJS := $(addsuffix .o,$(addprefix $(OBJDIR)/,$(ALLFILES)))

    DEPDIR := 依赖

    # --------- 自动目标 --------------

    .PHONY:全部
    全部:$(OBJDIR)$(DEPDIR)$(目标)
        @真的

    $(OBJDIR):
        mkdir $@


    # --------- 通用规则 --------------

    UNAME = $(shell unname)
    ifeq ($(UNAME), 达尔文) # Mac OS X
    # OpenGL 和 GLUT 是框架
    LDFLAGS = -Xlinker -framework,OpenGL,-framework,GLUT,-L,$(CUDA)/samples/common/lib/darwin,-lGLEW
    万一

    $(目标): $(ALLOBJS)
        $(NVCC) $^ $(LDFLAGS) -o $@

    $(OBJDIR)/%.o: %.cu
        $(NVCC) -c $(INCFLAGS) $$@

    $(DEPDIR)/%.d : %.cpp $(DEPDIR)
        @echo 为 $ $@ 创建依赖项

    $(DEPDIR):
        mkdir $@


    # ------ 管理的东西 --------

    .PHONY:干净

    干净的:
        rm -f *.o $(目标)
        rm -rf $(DEPDIR) $(OBJDIR)


    回声:
        @echo $(ALLSOURCES)
        @echo $(所有文件)
        @echo $(ALLOBJS)

于 2013-12-03T23:49:23.020 回答
1

Clang 成为 OsX Maverick 版本的默认编译器,gcc 和 g++ 命令被重定向到 clang 编译器。您可以通过自制软件下载 gcc 编译器,并按照以下步骤将 gcc 和 g++ 命令链接回 gcc 编译器。

$ brew install gcc48
[...]

$ sudo mkdir /usr/bin/backup && sudo mv /usr/bin/gcc /usr/bin/g++ /usr/bin/backup
$ sudo ln -s /usr/local/bin/gcc-4.8 /usr/bin/gcc
$ sudo ln -s /usr/local/bin/g++-4.8 /usr/bin/g++

我在这篇文章中找到了解决方案:http: //gvsmirnov.ru/blog/tech/2014/02/07/building-openjdk-8-on-osx-maverick.html#all-you-had-to-do -是跟随-该死的火车-cj

于 2014-10-09T13:23:31.143 回答
0

这是一个 Homebrew 食谱,适用于我的 Lion。

$ brew cat memtestG80
require "formula"

# Documentation: https://github.com/Homebrew/homebrew/wiki/Formula-Cookbook
#                /usr/local/Library/Contributions/example-formula.rb
# PLEASE REMOVE ALL GENERATED COMMENTS BEFORE SUBMITTING YOUR PULL REQUEST!

# Requires at compile time nvcc from https://developer.nvidia.com/cuda-downloads

# Requires popt at compile time

class Memtestg80 < Formula
  homepage ""
  url "https://github.com/ihaque/memtestG80/archive/master.zip"
  sha1 ""
  version "c4336a69fff07945c322d6c7fc40b0b12341cc4c"

  # depends_on "cmake" => :build
  depends_on :x11 # if your formula requires any X11/XQuartz components

  def install
    # ENV.deparallelize  # if your formula fails when building in parallel

    system "make", "-f", "Makefiles/Makefile.osx", "NVCC=/usr/local/cuda/bin/nvcc -ccbin /usr/bin/clang", "POPT_DIR=/usr/local/Cellar/popt/1.16/lib"
    system "cp", "-a", "memtestG80", "/usr/local/bin"
  end

  test do
    # `test do` will create, run in and delete a temporary directory.
    #
    # This test will fail and we won't accept that! It's enough to just replace
    # "false" with the main program this formula installs, but it'd be nice if you
    # were more thorough. Run the test with `brew test memtestG80`.
    #
    # The installed folder is not in the path, so use the entire path to any
    # executables being tested: `system "#{bin}/program", "do", "something"`.
    system "false"
  end
end
于 2014-03-01T22:21:25.630 回答