1

我正在尝试用 LLVM 编译 apache2,以在 LLVM IR 中生成最终的二进制文件。

我在编译和链接时使用了 flto 选项,并通过 clang 将“also-emit-llvm”传递给链接器。它似乎适用于大多数步骤,但是我有两个担忧

1)之前我用的是LLVM 3.6,它的gold插件不接受also-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

关于错误是什么的任何帮助?

4

1 回答 1

1

看一眼

https://github.com/SRI-CSL/whole-program-llvm

我们使用这个工具将相当大的项目构建成比特码。到目前为止,我们最大的是 FreeBSD 10.0,所以大小通常不是问题。

我们的 travis 构建检查实际上是 apache,就像我们的教程一样。希望有帮助。

于 2016-07-26T23:24:07.903 回答