“make”命令使用错误的clang编译器(编译CUDA示例) - 如何解决这个问题?

时间:2017-04-27 10:08:12

标签: cuda clang nvidia macos-sierra

我正在使用MacOS Sierra 10.12.4并尝试使用兼容CUDA的NVIDIA GeForce GT 750M在我的MacBook Pro(2013年末)上运行CUDA 8.0。

我按照NVIDIA installation guide安装了Xcode 8.2和相应的命令行工具,但是当我尝试编译样本时,我收到以下错误:

  

$ make -C 1_Utilities / deviceQuery

     

/Developer/NVIDIA/CUDA-8.0/bin/nvcc-ccbin clang ++ -I ../../ common / inc -m64 -Xcompiler -arch -Xcompiler x86_64 -gencode arch = compute_20,code = sm_20 -gencode arch = compute_30,code = sm_30 -gencode arch = compute_35,code = sm_35 -gencode arch = compute_37,code = sm_37 -gencode arch = compute_50,code = sm_50 -gencode arch = compute_52,code = sm_52 -gencode arch = compute_60,code = sm_60 -gencode arch = compute_60,code = compute_60 -o deviceQuery.o -c deviceQuery.cpp
  nvcc警告:'compute_20','sm_20'和'sm_21'体系结构已弃用,可能会在将来的版本中删除(使用-Wno-deprecated-gpu-targets来禁止警告)。
   nvcc致命:不支持主编译器('clang')的版本('30900')
  make:*** [deviceQuery.o]错误1

以下是我认为问题所在:
“make”命令使用了错误的clang,但我不知道如何更改/修复此问题。

在这里你可以看到我的机器上的两个版本的clang:

  

$ clang --version

     

clang version 3.9.0(tags / RELEASE_390 / final)
  目标:x86_64-apple-darwin16.5.0   螺纹型号:posix
  InstalledDir:/opt/local/libexec/llvm-3.9/bin

     

$ / usr / bin / clang --version

     

Apple LLVM 8.0.0版(clang-800.0.42.1)
  目标:x86_64-apple-darwin16.5.0
  线程模型:posix   InstalledDir:/Applications/Xcode_8.2.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

默认情况下如何让“make”命令在/ usr / bin / clang文件夹中使用正确的clang版本?

或者有没有办法告诉“make”命令通过添加一些参数/标签明确地在文件夹/ usr / bin / clang中使用clang版本?

如果有帮助的话,这里也是我的〜/ .bash_profile的样子:

# Setting PATH for Python 2.7
# The orginal version is saved in .bash_profile.pysave
PATH="/Library/Frameworks/Python.framework/Versions/2.7/bin:${PATH}"
export PATH
if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi

# MacPorts Installer addition on 2016-09-26_at_12:06:30: adding an appropriate PATH variable for use with MacPorts.
export PATH="/opt/local/bin:/opt/local/sbin:$PATH"
# Finished adapting your PATH environment variable for use with MacPorts.

export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8

# colorful terminal
export PS1="\[\033[36m\]\u\[\033[m\]@\[\033[32m\]\h:\[\033[33;1m\]\w\[\033[m\]\$ "
export CLICOLOR=1
export LSCOLORS=ExFxBxDxCxegedabagacad
alias ls='ls -GFh'

# CUDA
export PATH=/Developer/NVIDIA/CUDA-8.0.61/bin${PATH:+:${PATH}}
export DYLD_LIBRARY_PATH=/Developer/NVIDIA/CUDA-8.0.61/lib\
                         ${DYLD_LIBRARY_PATH:+:${DYLD_LIBRARY_PATH}}

1 个答案:

答案 0 :(得分:3)

通过make -n作为干运行,您可以看到make背后的真实命令。由于我没有基于nvidia的mac,我将向您展示linux版本作为示例:

"/usr/local/cuda-8.0"/bin/nvcc -ccbin g++ -I../../common/inc  -m64    -gencode arch=compute_20,code=sm_20 -gencode arch=compute_30,code=sm_30 -gencode arch=compute_35,code=sm_35 -gencode arch=compute_37,code=sm_37 -gencode arch=compute_50,code=sm_50 -gencode arch=compute_52,code=sm_52 -gencode arch=compute_60,code=sm_60 -gencode arch=compute_60,code=compute_60 -o deviceQuery.o -c deviceQuery.cpp
"/usr/local/cuda-8.0"/bin/nvcc -ccbin g++   -m64      -gencode arch=compute_20,code=sm_20 -gencode arch=compute_30,code=sm_30 -gencode arch=compute_35,code=sm_35 -gencode arch=compute_37,code=sm_37 -gencode arch=compute_50,code=sm_50 -gencode arch=compute_52,code=sm_52 -gencode arch=compute_60,code=sm_60 -gencode arch=compute_60,code=compute_60 -o deviceQuery deviceQuery.o
mkdir -p ../../bin/x86_64/linux/release
cp deviceQuery ../../bin/x86_64/linux/release

您可以看到-ccbin(或--compiler-bindir)是设置主机编译器的实际参数。同样nvcc --help会告诉你这个论点。

然后,您可以手动运行nvcc或尝试在Makefile中进行一些更改。

如果更改Makefile,您可以轻松找到要设置的HOST_COMPILER变量。 darwin版本的部分是这样的:

ifeq ($(TARGET_OS),darwin)
    ifeq ($(shell expr `xcodebuild -version | grep -i xcode | awk '{print $$2}' | cut -d'.' -f1` \>= 5),1)
        HOST_COMPILER ?= clang++
    endif

我猜你可以把它改成你自己的clang路径。