Wednesday, March 30, 2011

Building spec benchmarks with newer libstdc++

This post is mostly for the sake of others searching with the same problem.

I was having issues building the 483.xalancbmk benchmark with a not-so-new libstdc++ (4.3.4). There's a particular source file (FormatterToHTML.cpp) that uses memset without including string.h or cstring. This was the error message:

FormatterToHTML.cpp:139: error: 'memset' was not declared in this scope

It depended on an include of 'vector' to pull in 'cstring' as a transitive dep. That seems to have changed. Since the SPEC benchmarks go so far as to checksum the benchmark sources before letting you run them, it was easier to add '#include <cstring>' to /usr/include/c++/4.3.4/vector than fix the application. =(


  1. Thank you. Great go around! Did you have problems with libquantum and perlbench as well? If not, could you tell what linux distribution and version did you use?

  2. I was on a CSAIL Debian machine that I don't have access to anymore (probably squeeze? sid? I don't remember). I did some searching, and SPEC provides updates (in the form of DVDs, ugh) to the distribution that fix these kinds of portability bugs. This particular issue is on there list. (search, I don't have the link)