Compiling HHVM with GCC 4.9/5.2 and Boost
For my development environment I prefer using Debian unstable, as it usually has the latest and greatest things available. This tends to work a lot better with living-on-the-edge software like HHVM. However, in this case, GCC 5.2 was a little bit too living-on-the-edge for HHVM. Some system libraries were 'suddenly' compiled with GCC 5.2, which did not interact well with HHVM's GCC 4.9 (or even GCC 5.2) compiles. It mostly has to do with that GCC 5.1+ employs a new ABI for C++ compiled objects.
As I'm currently working on a MongoDB extension for HHVM, I really needed my own HHVM compiled — with debugging symbols. I could also not use HHVM's nightlies or binaries, as their Debian packages depend on versions of libraries that my Debian install no longer provides.
HHVM uses google-glog for some logging stuff, and this was the first library that caused issues when linking. The error message was:
../../../third-party/folly/libfolly.a(dynamic.cpp.o): In function `std::string* google::MakeCheckOpString<unsigned long, unsigned long>(unsigned long const&, unsigned long const&, char const*)':
/usr/include/glog/logging.h:672: undefined reference to `google::base::CheckOpMessageBuilder::NewString()'
../../../third-party/folly/libfolly.a(Format.cpp.o): In function `std::string* google::MakeCheckOpString<int, int>(int const&, int const&, char const*)':
/usr/include/glog/logging.h:672: undefined reference to `google::base::CheckOpMessageBuilder::NewString()'
collect2: error: ld returned 1 exit status
hphp/tools/bootstrap/CMakeFiles/gen-class-map.dir/build.make:123: recipe for target 'hphp/tools/bootstrap/gen-class-map' failed
make[2]: *** [hphp/tools/bootstrap/gen-class-map] Error 1
CMakeFiles/Makefile2:945: recipe for target 'hphp/tools/bootstrap/CMakeFiles/gen-class-map.dir/all' failed
make[1]: *** [hphp/tools/bootstrap/CMakeFiles/gen-class-map.dir/all] Error 2
Makefile:106: recipe for target 'all' failed
make: *** [all] Error 2
I promptly filed an issue, which wasn't going anywhere fast enough.
But the hints in the comments were good enough for me to try and find a solution.
google-glog
To sort out google-glog and get a GCC 4.9 compiled version installed, I first removed the system version with apt-get remove libgoogle-glog-dev
libgoogle-glog0v5. I then downloaded the source package through apt: apt-get source libgoogle-glog-dev. To compile, I ran:
-
Make sure we use the 'old' compiler:
-
export ASM=`which gcc-4.9` -
export CXX=`which g++-4.9` -
export CC=`which gcc-4.9`
-
-
cd google-glog-0.3.4 -
./configure -
In the generated
Makefile, I changed theACLOCALdefine toaclocal-1.15(line 613) and theAUTOMAKEdefine toautomake-1.15(line 629). For some reason, they were both-1.14which isn't installed. -
make -
automake --add-missingto silence a warning about some installer -
make -j 20 -
sudo make install
Boost
Boost was a bit trickier, as it's build system is "novel". I did not have to remove the packages that I installed with APT though, and HHVM's build system was clever enough to pick up on my newly compiled libraries which I installed in /usr/local.
-
Download Boost:
wget http://downloads.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.bz2 -
Extract:
tar -xvjf boost_1_59_0.tar.bz2 -
Change into directory:
cd boost_1_59_0/ -
Run
./bootstrap.sh -
mkdir tools/build/v2 -
Setup our new (old) compiler as toolset (found on StackOverflow):
echo "using gcc : 4.9 : /usr/bin/g++-4.9 ; " > tools/build/v2/user-config.jam -
Compile:
./bjam --toolset=gcc-4.9 -j 16 -
Install into
/usr/local:sudo ./b2 install --prefix=/usr/local --toolset=gcc-4.9 -
sudo ldconfig
That sorted out Boost.
HHVM
I then compiled HHVM in my normal fashion, ensuring I was using GCC 4.9:
-
export CC=`which gcc-4.9` -
export CXX=`which g++-4.9` -
export ASM=`which gcc-4.9` -
Check out the 3.9.1 release:
git checkout 3.9.1 && git submodule update --recursive -
Clean things up:
git clean -dfx -f && git clean -dfx -f third-party -
Configure (make sure it picks up the new 1.59 version of Boost that you just compiled yourself):
cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=/usr/local/hhvm/3.9.1 . -
make -j 20 -
make install
Et voilá, a working HHVM compiled with GCC 4.9 on the latest Debian unstable.
Life Line
TIL that Kingfishers can hover just like hummingbird. I'll hopefully have some reasonable shots after I've gone through my nearly thousand shots today...
I hiked 9.8km in 3h40m47s
Updated a restaurant
Updated a vacant business
I walked 7.1km in 1h16m56s
I walked 3.9km in 45m56s
I walked 1.1km in 10m47s
I think this was my favourite photo of the set that I took. It's not at maximum coverage, but it does have a sun spot group (4508) just on the cusp of the terminator.
#eclipse #eclipse2026 #SolarEclipse #London #Astronomy #AstroPhotography #Photography
No totality here in London, but still had a great evening out in the local park and taking some snaps.
I did have a nice Solar Filter that I made for my lens, and had many conversations with people from different backgrounds. Kids loves to look through my filter after I was done (ran out of battery power).
More photos later...
I walked 0.9km in 9m28s
I walked 1.2km in 19m05s
Merged pull request #1100
Fixed issue #2267: Application slow when debugger is not listening on…
I walked 4.7km in 48m18s
I walked 3.0km in 1h10m24s
Is there somebody who runs PHP on native windows (with Xdebug) and can run a simple script for me?
It must be in a file (`test.php`):
```
<?php
echo microtime(true), "\n";
xdebug_connect_to_client();
echo microtime(true), "\n";
```And run like:
php -dxdebug.log_level=11 -dxdebug.log=c:\temp\xdebug-i.log -dxdebug.client_host=localhost -dxdebug.client_port=9111 -dxdebug.mode=debug c:\temp\test.php
With the port 9111 not open.
Would love to see the output and log file (in a DM).
I walked 5.5km in 55m06s
@harry_wood This is this list of 100 Go-mistakes that I was talking about: https://100go.co/
Updated a crossing
I walked 2.1km in 20m08s
Enjoying my afternoon and evening out at Lords for some cricket!
I walked 3.2km in 38m54s
I walked 9.1km in 1h34m28s
Updated a gate
Updated a bakery shop




Shortlink
This article has a short URL available: https://drck.me/hhvm-gcc-bwe