clang 错误 - OSX Mavericks 找不到 CUDA 目录
我在我的MacBook Pro 15寸视网膜屏上,使用OSX Mavericks系统,想要安装一个叫做PyCUDA的CUDA包,但在编译文件时遇到了以下错误:
ld: warning: directory not found for option '-F /Library/Frameworks -framework CUDA'
ld: file not found: @rpath/CUDA.framework/Versions/A/CUDA for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
error: command 'g++' failed with exit status 1
我觉得在这个阶段,PyCUDA正在尝试编译它的一些C语言组件。
我在网上查了这个错误,找到的解决办法是把-F/Library/Frameworks和-framework CUDA加到参数列表里,但编译还是失败,错误信息和之前一样。
我已经安装了CUDA 5.5和Xcode命令行工具。而且我是在命令行中安装的(不是通过Xcode),使用的是:
python setup.py install
这会调用clang来编译一些组件。
我觉得路径中的@rpath部分没有被正确处理。
有没有办法解决这个错误呢?
3 个回答
0
你可以在 Python2.7
或 Python3.4
版本中使用这个步骤。
首先,我安装了 boost 库:
$brew install boost
$brew install boost-python
接下来,你需要创建一个文件 $HOME/.aksetup-defaults.py
,文件内容是:
CUDA_ROOT = '/usr/local/cuda'
CUDADRV_LIBNAME = ['cuda']
CUDADRV_LIB_DIR = ['${CUDA_ROOT}/lib']
CUDART_LIBNAME = ['cudart']
CUDART_LIB_DIR = ['${CUDA_ROOT}/lib']
CUDA_ENABLE_CURAND = True
CUDA_ENABLE_GL = True
CUDA_INC_DIR = ['${CUDA_ROOT}/include']
CUDA_TRACE = False
CURAND_LIBNAME = ['curand']
CURAND_LIB_DIR = ['${CUDA_ROOT}/lib']
USE_SHIPPED_BOOST = True
最后,使用 pip 安装 pycuda。
$python -m pip install pycuda
好了!现在可以开始使用 pycuda
了。
1
只需要在你的 .profile
文件里加上 export LDFLAGS="-F/Library/Frameworks/"
这一行就可以了。
这样一来,pip
就能顺利安装 pycuda
了,至少在我用的 Yosemite 系统的 Macbook 上是这样。
2
我遇到了类似的错误,但我成功地按照这个链接的说明安装了pycuda:http://wiki.tiker.net/PyCuda/Installation/Mac
特别是,我按照说明使用了siteconf.py这个文件。
BOOST_INC_DIR = []
BOOST_LIB_DIR = []
BOOST_COMPILER = 'gcc43'
USE_SHIPPED_BOOST = True
BOOST_PYTHON_LIBNAME = ['boost_python-py27']
BOOST_THREAD_LIBNAME = ['boost_thread']
CUDA_TRACE = False
CUDA_ROOT = '/usr/local/cuda'
CUDA_ENABLE_GL = False
CUDA_ENABLE_CURAND = True
CUDADRV_LIB_DIR = ['${CUDA_ROOT}/lib']
CUDADRV_LIBNAME = ['cuda']
CUDART_LIB_DIR = ['${CUDA_ROOT}/lib']
CUDART_LIBNAME = ['cudart']
CURAND_LIB_DIR = ['${CUDA_ROOT}/lib']
CURAND_LIBNAME = ['curand']
CXXFLAGS = ["-arch", "x86_64", "-arch", "i386"]
LDFLAGS = ["-F/Library/Frameworks", "-arch", "x86_64", "-arch", "i386"]
CXXFLAGS.extend(['-isysroot', '/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk'])
LDFLAGS.extend(['-isysroot', '/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk'])