在macosx上构建和运行llvmpy

2024-06-08 20:31:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在macosx上构建llvm-py

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

  1. 下载llvm 2.7。在
  2. 构建llvm2.7:运行./configure --prefix=LLVM_DIRECTORY --enable-pic
  3. 下载llvm-py 0.6。在
  4. 构建llvm py0.6:运行python setup.py build --llvm-config=LLVM_DIRECTORY/bin/llvm-config

所有的编译都没有错误,但是当我试图运行测试文件时,我收到了这个错误消息。在

ImportError: 'dlopen(/Library/Python/2.7/site-packages/llvm/_core.so, 2): Symbol not found: __ZTVN4llvm16ExtractValueInstE\n Referenced from: /Library/Python/2.7/site-packages/llvm/_core.so\n Expected in: flat namespace\n in /Library/Python/2.7/site-packages/llvm/_core.so'

消息错误似乎表示缺少函数“llvmExtractValueInst”,存在平面名称空间问题。这怎么了?在

在llvm2.7中生成文件.rules有这条线吗

SharedLinkOptions=-Wl,-flat_namespace -Wl,-undefined -Wl,suppress \ -dynamiclib

我试图删除flat_namespace,但是我得到了编译错误。在

已添加

按照locojay的回答,我可以构建brew和llvmpy。在

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

但是,当我试图在test目录中执行示例时,我仍然遇到了不同类型的错误-

^{pr2}$

这是我运行otool -L /Library/Python/2.7/site-packages/llvm/_core.so时的结果

/Library/Python/2.7/site-packages/llvm/_core.so:
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 52.0.0)

Tags: pycoresoenableversionpackages错误library
2条回答

我就是这样做的。在

  1. 使用brew安装llvm
    • export REQUIRES_RTTI=1
    • brew install llvm enable-shared with-clang with-asan rtti enable-jit
    • 您可以跳过启用jit或使用clang
  2. 下载llvm py
    • git clone https://github.com/llvmpy/llvmpy.git
  3. 生成llvm py
    • LLVM_CONFIG_PATH=/usr/local/opt/llvm/bin/llvm-config python setup.py install
    • 您可能需要检查是否不需要获取此命令的根访问权限
  4. 试验
    • python -c 'import llvm; llvm.test()'

它可以在lsxmavericks下的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

我还尝试了kaleidoscope,它似乎工作得很好:

^{pr2}$

/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

看一看@docs of llvmpy

For LLVM 3.2, make sure that environment variable REQUIRES_RTTI=1 is defined when running make. Otherwise, you may see "undefined symbol: _ZTIN4llvm24PassRegistrationListenerE". Please refer to http://llvm.org/docs/Packaging.html#c-features for details.

所以对我来说这很管用

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

我想在最坏的情况下,人们总可以试试水蟒。。。。在

相关问题 更多 >