我在python中编写了一个语言词法分析器/解析器/编译器,它应该llvm-py稍后在LLVM JIT-VM(使用)中运行.前两个步骤现在非常简单,但是(即使我还没有启动编译任务)我看到一个问题,当我的代码想调用Python-Code(一般),或者与Python lexer交互时/ parser/compiler(特殊)分别.我主要担心的是,代码应该能够在运行时动态地将其他代码加载到VM中,因此它必须从VM中触发Python中的整个词法分析器/解析器/编译器链.
首先:这是否可能,或者VM一旦启动就"不可改变"?
如果是,我目前看到3种可能的解决方案(我愿意接受其他建议)
我试图在Mac OS X上构建llvm-py.
这是我试图做的,我需要下载11vm-2.7,而README文件有这样的评论:确保'--enable-pic'传递给LLVM的'configure'
./configure --prefix=LLVM_DIRECTORY --enable-picpython 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'
消息错误似乎表示缺少具有平面namemspace问题的函数"llvmExtractValueInst".这有什么问题?
在llvm 2.7中,Makefile.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
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试在测试目录中执行示例时,我仍然遇到了不同类型的错误 -
test> python example.py
Traceback (most recent call last):
File "example.py", line 4, in …Run Code Online (Sandbox Code Playgroud)