如何让llvm jit在MSVC ++中工作

时间:2015-11-08 23:00:56

标签: c++ llvm

似乎LLVM中的Kaleidoscope示例已被破坏,至少在MSVC ++ x64中已经有一段时间了,可能是几个月。出于同样的原因,它在MCJIT及其新的Orc JIT框架中不起作用。

// Get the address of the JIT'd function in memory.
auto ExprSymbol = J.findUnmangledSymbol("__anon_expr");

此表达式返回null并导致空指针错误。我现在无法猜测如何制定解决方法,因为调用树太深,可能需要几天的调试时间。但从理论上讲,这段代码具有教育意义,不应该给新手带来麻烦。所以也许我做错了什么。

2 个答案:

答案 0 :(得分:1)

对我而言,解决此问题的最简单方法是修补findMangledSymbol功能,调用CompileLayer.findSymbolIn并将bExportedSymbolsOnly设置为false。它没有解决问题,但避免了这种症状。

答案 1 :(得分:0)

来自llvm邮件列表的Lang Hames能够回答这个问题。似乎方法COFFObjectFile :: getSymbolFlags根本不启用SF_Export标志,因此使得所有创建的符号对于Windows平台中的Kaleidoscope的findSymbol方法是不可见的。但是可以访问非导出的符号,因此可以采用某种解决方法。