llvm lli能执行swift ir吗

llvm lli能执行swift ir吗,llvm,Llvm,我有一个函数(用Swift编写),我希望获得该函数的LLVM IR以及任何依赖项,这样我就可以在完全自包含的环境中运行生成的LLVM IR 作为一个例子,考虑以下函数: func plus(a: Int, b: Int) ->Int { return a + b } plus(5, 7) 我可以将emit ir选项传递给swiftc,但是,生成的LLVM ir包含外部调用,并且无法使用lli运行生成的ir(错误如下所示) 是否有任何方法获取这些外部函数的IR,以便我可以使用ll

我有一个函数(用Swift编写),我希望获得该函数的LLVM IR以及任何依赖项,这样我就可以在完全自包含的环境中运行生成的LLVM IR

作为一个例子,考虑以下函数:

func plus(a: Int, b: Int) ->Int {
    return a + b
}

plus(5, 7)
我可以将
emit ir
选项传递给
swiftc
,但是,生成的LLVM ir包含外部调用,并且无法使用
lli
运行生成的ir(错误如下所示)


是否有任何方法获取这些外部函数的IR,以便我可以使用
lli
运行程序?

您需要向
lli
教授二进制文件的依赖关系。 下面是如何做到这一点

假设有一个“hello world”计划:

将其编译为LLVM位代码和普通可执行文件:

> swiftc main.swift -o hello
> swiftc -emit-bc main.swift -o hello.bc
如果您按原样通过
lli
运行
main.bc
,那么您将遇到与您在程序中看到的错误类似的错误

要了解依赖关系,您可以在macOS上使用
otool
,在Linux上使用
ldd

> otool -L /path/to/executbale
> ldd /path/to/executbale
以下是“hello world”计划的依赖项:

在这种情况下,我们需要将
libswiftSwiftOnoneSupport.dylib
libswiftCore.dylib
传递给
lli
sing
-load
选项

在我的机器上,这些库位于这个目录中(我使用
find
查找它们):

最后,以下是如何运行程序:

> lli \
    -load=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/macosx/libswiftCore.dylib \
    -load=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/macosx/libswiftSwiftOnoneSupport.dylib \
    hello.bc

另外,请注意参数的顺序:位码文件放在最后很重要。

谢谢!我做同样的事情,它的工作!但我添加了“import Foundation”不能告诉我“原因:找不到图像-加载请求被忽略”。请仔细检查文件路径?
> otool -L /path/to/executbale
> ldd /path/to/executbale
> otool -L ./hello
./hello:
    /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 1450.15.0)
    /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.0.0)
    @rpath/libswiftCore.dylib (compatibility version 1.0.0, current version 900.0.74)
    @rpath/libswiftSwiftOnoneSupport.dylib (compatibility version 1.0.0, current version 900.0.74)
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/macosx
> lli \
    -load=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/macosx/libswiftCore.dylib \
    -load=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/macosx/libswiftSwiftOnoneSupport.dylib \
    hello.bc