clang 3.5 with "-flto" does not generate .bc files


I am trying to use clang to generate bitcode file. I read in that clang with -flto option can generate bitcode files. I have built and have gold with plugin support. I tried “clang -c -flto toy.c -o toy.bc” and it does produce bitcode. However, when I try it on lighttpd 1.4.35, then it only produce the binary, but not produce bitcode of lighttpd. I also tried it on apache2.0.56, and it create the errors like the following when linking.

/usr/bin/ error: strings/.libs/apr_cpystrn.o:1:3: invalid character
/usr/bin/ error: strings/.libs/apr_cpystrn.o:1:3: syntax error, unexpected $end
/usr/bin/ error: strings/.libs/apr_cpystrn.o: not an object or archive

I am using ubuntu 12.04. I have the following questions:

  1. for lighttpd, why is it able to build but not produce bitcode?

  2. for apache, does the error means that gold plugin is not found by clang and make it fail to link? I read “-use-gold-plugin” can solve this problem on clang 3.0. But this option is not recognized by clang 3.5. Will clang 3.0 solve this problem?

Many thanks!


In the case of lighttpd, I suspect that the configure script is not picking up the -flto option. Examine the output of the build (or look at the Makefiles) to see if it is indeed compiling with the -flto option as expected. If not, you either need to play around with the configure script (e.g., set CC to “clang -flto”) or modify the Makefiles. This error is most likely caused by a program that is expecting a regular object file but is reading a bitcode file instead. You should determine what command the make program is running that is generating this error. Once you know that, you can determine how to fix the error (by modifying the Makefiles or adjusting the variable you set before running configure). Also be aware that ar, nm, etc. need to find the file in a particular place in order to read bitcode files. Be sure that is installed properly. The SAFECode libLTO directions may provide some illumination: . The Apache build system in particular does some interesting things. You’ll probably need to modify the build system to get it to work. Regards, John Criswell