Python 在Mac OS X上构建和运行llvm py
我试图在MacOSX上构建 这就是我试图做的,我需要下载11vm-2.7,自述文件有这样的注释:确保将“--enable pic”传递给LLVM的“configure”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 一切编译都没有错误,但当我试图运行测试文件时,收到了此错误消息
/configure--prefix=llvm\u目录--启用pic
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
我想在最坏的情况下,人们总是可以尝试一下蟒蛇……这就是我如何让它工作的
导出需要\u RTTI=1
brew安装llvm--启用共享--使用clang--使用asan--rtti--启用jit
- 您可以跳过--启用jit或--使用叮当
git克隆https://github.com/llvmpy/llvmpy.git
LLVM\u CONFIG\u PATH=/usr/local/opt/LLVM/bin/LLVM CONFIG python setup.py安装
- 您可能需要检查是否不需要获取此命令的根访问权限
python-c'导入llvm;llvm.test()'
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