我正在尝试使用LLVM编译apache2,以在LLVM IR中生成最终的二进制文件。
我在编译和链接时使用了flto选项并传递了" also-emit-llvm"通过clang到链接器。 它似乎适用于大多数步骤,但我有两个问题
1)之前我使用的是LLVM 3.6,其黄金插件并不接受--emit-llvm,但只有emit-llvm,基本上它只会发出elf或llvm。 Autotools构建系统并不喜欢。 configure和make脚本需要二进制文件,而我想要llvm。任何解决方案吗?
2)所以我转移到LLVM 3.5.2,构建过程顺利,我可以生成httpd.bc和httpd elf二进制文件,但链接器并不想链接模块(它能够二进制文件的链接) 具体来说,我收到此错误
`
/usr/share/apr-1.0/build/libtool --silent --mode=link /home/rbhatia/Desktop/llvm-newbuild/bin/clang -pthread -flto -o mod_authn_file.la -rpath /home/rbhatia/Desktop/httpd-2.4.12/llvm/modules -module -avoid-version mod_authn_file.lo
/usr/bin/ld: error: .libs/mod_authn_file.o:1:3: invalid chaenter code hereracter
/usr/bin/ld: error: .libs/mod_authn_file.o:1:3: syntax error, unexpected $end
/usr/bin/ld: error: .libs/mod_authn_file.o: not an object or archive
collect2: error: ld returned 1 exit status
`
我可以看到mod_authn_file.o是一个有效的LLVM IR文件,我可以用llvm-dis反汇编。 此外,在此步骤之前,链接器能够链接httpd和httpd.bc
有关错误的任何帮助?
答案 0 :(得分:1)
看看
https://github.com/SRI-CSL/whole-program-llvm
我们使用此工具将相当大的项目构建到bitcode中。我们的 到目前为止最大的是FreeBSD 10.0,所以尺寸通常不是问题。
我们的travis构建检查实际上是 apache,就像我们的教程一样。希望有所帮助。