2

首先,我只是为了好玩,而不是为了生产。

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 的线程库中有内联汇编。所以,它不能运行...

4

0 回答 0