Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Mac OS X上构建和运行llvm py_Python_Macos_Build_Llvm_Llvm Py - Fatal编程技术网

Python 在Mac OS X上构建和运行llvm py

Python 在Mac OS X上构建和运行llvm py,python,macos,build,llvm,llvm-py,Python,Macos,Build,Llvm,Llvm Py,我试图在MacOSX上构建 这就是我试图做的,我需要下载11vm-2.7,自述文件有这样的注释:确保将“--enable pic”传递给LLVM的“configure” 下载 构建llvm 2.7:运行/configure--prefix=llvm\u目录--启用pic 下载 Build llvm py 0.6:Runpython setup.py Build--llvm config=llvm_目录/bin/llvm config 一切编译都没有错误,但当我试图运行测试文件时,收到了此错误消息

我试图在MacOSX上构建

这就是我试图做的,我需要下载11vm-2.7,自述文件有这样的注释:确保将“--enable pic”传递给LLVM的“configure”

  • 下载
  • 构建llvm 2.7:运行
    /configure--prefix=llvm\u目录--启用pic
  • 下载
  • Build llvm py 0.6:Run
    python setup.py Build--llvm config=llvm_目录/bin/llvm config
  • 一切编译都没有错误,但当我试图运行测试文件时,收到了此错误消息

    ImportError:'dlopen(/Library/Python/2.7/site-packages/llvm//u core.so,2):未找到符号:\uuu ZTVN4llvm16ExtractValueInstE\n引用自:/Library/Python/2.7/site packages/llvm/_core.so'

    消息错误似乎表明缺少一个函数“llvmExtractValueInst”,该函数具有平面名称mspace问题。这个怎么了

    在llvm 2.7中,Makefile.rules有以下行

    SharedLinkOptions=-Wl,-flat\u namespace-Wl,-undefined-Wl,suppress\
    -dynamiclib

    我试图删除
    flat_名称空间
    ,但出现编译错误

    补充 根据locojay的回答,我可以构建brew和llvmpy

    export REQUIRES_RTTI=1
    brew install llvm --rtti
    sudo pip install git+https://github.com/llvmpy/llvmpy
    
    然而,当我试图在test目录中执行这些示例时,我仍然得到了不同类型的错误-

    test> python example.py 
    Traceback (most recent call last):
      File "example.py", line 4, in <module>
        from llvm import *
      File "/Library/Python/2.7/site-packages/llvm/__init__.py", line 11, in <module>
        from llvm import _core
    ImportError: dlopen(/Library/Python/2.7/site-packages/llvm/_core.so, 2): Symbol not found: __ZN4llvm10DataLayout2IDE
      Referenced from: /Library/Python/2.7/site-packages/llvm/_core.so
      Expected in: flat namespace
     in /Library/Python/2.7/site-packages/llvm/_core.so 
    

    看看llvmpy的@docs

    对于LLVM 3.2,确保环境变量REQUIRES_RTTI=1为 在运行make时定义。否则,您可能会看到“未定义符号: _Ztin4LLVM24PassRegistrationListener”。详情请参阅

    所以对我来说这很有效

    export REQUIRES_RTTI=1
    brew install llvm --rtti
    pip install git+https://github.com/llvmpy/llvmpy
    

    我想在最坏的情况下,人们总是可以尝试一下蟒蛇……

    这就是我如何让它工作的

  • 使用brew安装llvm
    • 导出需要\u RTTI=1
    • brew安装llvm--启用共享--使用clang--使用asan--rtti--启用jit
    • 您可以跳过--启用jit或--使用叮当
  • 下载llvmpy
    • git克隆https://github.com/llvmpy/llvmpy.git
  • 构建llvmpy
    • LLVM\u CONFIG\u PATH=/usr/local/opt/LLVM/bin/LLVM CONFIG python setup.py安装
    • 您可能需要检查是否不需要获取此命令的根访问权限
  • 试验
    • python-c'导入llvm;llvm.test()'
  • 它在OSX Mavericks下的LLVM3.3下工作

    test_scalar_type (llvm.tests.test_type_hash.TestTypeHash) ... ok
    test_struct_type (llvm.tests.test_type_hash.TestTypeHash) ... ok
    test_uses (llvm.tests.test_uses.TestUses) ... ok
    test_volatile (llvm.tests.test_volatile.TestVolatile) ... ok
    test_volatile_another (llvm.tests.test_volatile.TestVolatile) ... ok
    
    ----------------------------------------------------------------------
    Ran 75 tests in 0.249s
    
    OK (skipped=4)
    -------------------------------run isolated tests-------------------------------
                        testing llvm.tests.test_intel_native_asm                    
    .
    ----------------------------------------------------------------------
    Ran 1 test in 0.008s
    
    OK
    
    我也试过了,似乎效果不错:

    $ python kaleidoscope.py 
    ready> 3+5
    Evaluated to: 8.0
    ready> 1-34-5
    Evaluated to: -38.0
    ready> 
    
    /Library/Python/2.7/site packages/llvmpy/capsule.py
    第114行中进行了一次修改。我不确定这是不是有害的,但它的工作与这种变化

    def release_ownership(old):
        logger.debug('Release %s', old)
        addr = getPointer(old)
        name = getName(old)
        if _addr2dtor.get((name, addr)) is None:
            clsname = getClassName(old)
    
            if not _pyclasses[clsname]._has_dtor():
                return
                # Guard duplicated release <-- raises an error 
            return
            raise Exception("Already released")
        _addr2dtor[(name, addr)] = None
    
    def版本所有权(旧):
    logger.debug('版本%s',旧版)
    addr=getPointer(旧)
    name=getName(旧)
    如果_addr2dtor.get((名称,addr))为无:
    clsname=getClassName(旧)
    如果没有_pyclasses[clsname]。_有_dtor():
    返回
    
    #Guard duplicated release它可能有助于验证哪个库_core.so正在链接,您可以在OSX上使用“otool-L/library/Python/2.7/site packages/llvm/_core.so”在“brew安装llvm”中使用“错误:没有可用的llvmpy公式”。未找到另一个错误”符号:u ZN4llvm10DataLayout2IDE在执行示例时。我更新了我的作业。谢谢。
    def release_ownership(old):
        logger.debug('Release %s', old)
        addr = getPointer(old)
        name = getName(old)
        if _addr2dtor.get((name, addr)) is None:
            clsname = getClassName(old)
    
            if not _pyclasses[clsname]._has_dtor():
                return
                # Guard duplicated release <-- raises an error 
            return
            raise Exception("Already released")
        _addr2dtor[(name, addr)] = None