GNU Gold & ROS
Trying to speed up ROS workspace build time.
Mon, Oct 28, 2013
I've tried to tightly follow the development of ROS1 buildtools and the work OSRF is doing to try to make robotics software systems build faster, and in the process have come across some other alternatives to the core Catkin2 mechanism which speed up large, complex builds. One such alternative was mentioned to me by Thibault Kruse is GNU Gold after finding a thread on the Orocos mailing lists:
Some guys at Google thought that GNU ld was a bit slow on C++ programs. Guess what, they were right and wrote a new C++ linker from scratch. Enter GNU gold. It links about 10x faster than traditional ld.3
GNU Gold4 (beta) is the sucessor to
ld and it's meant to link
libraries and executables significantly faster than its predecessor. On Ubuntu
12.04, gold isn't installed by default, but you can install a fairly recent
version of it (2.22) quickly and easily with aptitude:
sudo apt-get install binutils-gold
If you're on another platform, or just want to see if you're already using gold,
you can check just by checking which version your system's
ld points to:
If you're using gold, it will say "gold" in the first line.
I tried building some things including Orocos, and Gold definitely sped up
the process of building a large workspace. It failed, however, when it tried
linking a target against some proprietary, closed-source libraries that were
/usr/local/lib instead of
/usr/lib. It turns out this is a
side-effect of an intentional change in the sources from which gold gathers
library search paths over the way standard
Specifically, while both standard
ld and gold will search:
ld will also search the runtime shared library path,
gold will not. This means that if you had been relying on
$LD_LIBRARY_PATH to locate libraries at build time, this will no longer work.
An easy fix for this, is to add the necessary paths to
Once I worked out my PATH problems, GNU Gold works like a dream.