首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为codepy.toolchain设置编译器?

如何为codepy.toolchain设置编译器?
EN

Stack Overflow用户
提问于 2014-11-08 03:21:29
回答 2查看 322关注 0票数 1

这两行代码取自PyCuda/Examples中的ThrustInterop.py

代码语言:javascript
复制
import codepy.toolchain
codepy.toolchain.guess_toolchain()

我知道这应该返回在$HOME/.aksetup-defaults.py中找到的C++编译器的工具链实例。

代码语言:javascript
复制
BOOST_COMPILER = 'gcc'
BOOST_INC_DIR = ['/usr/local/Cellar/boost/1.57.0/include/']
BOOST_LIB_DIR = ['/usr/local/Cellar/boost/1.57.0/lib/']

BOOST_PYTHON_LIBNAME = ['boost_python']
BOOST_THREAD_LIBNAME = ['boost_thread']
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 = False

在Python 2.7.6下,我得到以下异常

代码语言:javascript
复制
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Library/Python/2.7/site-packages/codepy/toolchain.py", line 433, in guess_toolchain
    raise ToolchainGuessError("unknown compiler")
codepy.toolchain.ToolchainGuessError: unknown compiler

在装有Python 3.4.1的群集上:

代码语言:javascript
复制
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/cluster/home03/math/echeverl/local2/lib/python3.4/site-packages/codepy/toolchain.py", line 439, in guess_nvcc_toolchain
    gcc_kwargs = _guess_toolchain_kwargs_from_python_config()
  File "/cluster/home03/math/echeverl/local2/lib/python3.4/site-packages/codepy/toolchain.py", line 398, in _guess_toolchain_kwargs_from_python_config
    so_ext=make_vars["SO"],
KeyError: 'SO'

在查看了这个库之后,我发现它不能识别clang,所以我修改了toolchain.py中的‘guess_toolchain

代码语言:javascript
复制
def guess_toolchain():
    """Guess and return a :class:`Toolchain` instance.

    Raise :exc:`ToolchainGuessError` if no toolchain could be found.
    """
    kwargs = _guess_toolchain_kwargs_from_python_config()

    from pytools.prefork import call_capture_output
    result, version, stderr = call_capture_output([kwargs["cc"], "--version"])
    if result != 0:
        raise ToolchainGuessError("compiler version query failed: "+stderr)
    #Original Code
    # if "Free Sofware Foundation" in version:
    #Modified line to recognize clang 
    if ("Free Software Foundation" in version) or ("clang" in version):
        if "-Wstrict-prototypes" in kwargs["cflags"]:
            kwargs["cflags"].remove("-Wstrict-prototypes")
        if "darwin" in version:
            # Are we running in 32-bit mode?
            # The python interpreter may have been compiled as a Fat binary
            # So we need to check explicitly how we're running
            # And update the cflags accordingly
            import sys
            if sys.maxint == 0x7fffffff:
                kwargs["cflags"].extend(['-arch', 'i386'])

        return GCCToolchain(**kwargs)
    else:
        raise ToolchainGuessError("unknown compiler")

我如何告诉codepy.toolchain使用哪个编译器?

EN

回答 2

Stack Overflow用户

发布于 2014-11-15 04:52:28

CC环境变量设置为适当的值可能会有所帮助。还要检查Python Makefile,它存储在Python lib目录中的config下。这就是配置信息最初的来源。

票数 2
EN

Stack Overflow用户

发布于 2014-11-20 04:44:47

我将文件~/.aksetup-defaults.py修改为:

代码语言:javascript
复制
#For CUDA
CUDA_ROOT=['/Developer/NVIDIA/CUDA-5.0/']
CUDADRV_LIB_DIR=['/Developer/NVIDIA/CUDA-5.0/lib']
CUDA_INC_DIR=['/Developer/NVIDIA/CUDA-5.0/include']

#For Boost
BOOST_INC_DIR=['${HOME}/pool/include/']
BOOST_LIB_DIR=['${HOME}/pool/lib']
USE_SHIPPED_BOOST=False

这解决了toolchain的问题,但我仍在尝试如何编译。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26808536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档