clang 错误 - OSX Mavericks 找不到 CUDA 目录

0 投票
3 回答
1669 浏览
提问于 2025-04-18 01:30

我在我的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.7Python3.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'])

撰写回答