首先,我只是为了好玩,而不是为了生产。
LLVM 的位码在某种程度上可以像 Java 的字节码一样工作,可以跨平台。我认为它应该在大多数情况下都有效,除非您的代码包含一些内联汇编或一些特殊的东西。我已经clang
在 Linux 中成功编译了一个带有 LLVM 位码的简单 hello world 程序,并lli
在 Windows 中正确运行它。
但是,我怎样才能以这种方式使用 boost_thread 之类的 boost 库呢?我可以将 bitcode 文件打包在一起llvm-link
,它仍然是跨平台的。但是,如果我通过某些方法将位代码与 *.a 链接(我没有尝试这样做,但似乎即使llvm-ld
已被删除我也可以这样做),它可能不再是跨平台的(并成为本机二进制文件可执行文件)。所以,我想将 boost 编译为 LLVM 位码,以便我可以将 boost 库链接到我的程序。
如果您认为静态链接它会使位码变大,您也可以在运行时“链接”它们,通过lli <your bitcode> <boost's bitcode>...
我已经用./b2 toolset=clang cxxflags="-emit-llvm -c"
. 我不确定我的方法是否正确。如果没有,我有什么办法可以编译提升到位码?
编辑:上面的命令似乎是部分工作。生成的 *.o 文件是 LLVM 位码,但随后将存档到 *.a。只需解压缩 *.a 并使用llvm-link
将存档中的文件链接在一起即可。
但是,不幸的是,boost 的线程库中有内联汇编。所以,它不能运行...