Installation Notes for 64-bit Linux Systems¶
Note
The description on this page is possibly not up-to-date.
The glibc built-in stack-unwinder on 64-bit
systems has some problems with glog. In particular, if you are using
InstallFailureSignalHandler()
, the signal may be raised in the
middle of malloc
, holding some malloc
-related locks when they invoke the
stack unwinder. The built-in stack unwinder may call malloc
recursively, which
may require the thread to acquire a lock it already holds resulting in a
deadlock.
Recommended Approach: libunwind
¶
For above reason, if you use a 64-bit system and you need
InstallFailureSignalHandler()
, we strongly recommend you install libunwind
before trying to configure or install google glog. libunwind can be found
here.
Even if you already have libunwind
installed, you will probably still need to
install from the snapshot to get the latest version.
Warning
If you install libunwind from the URL above, be aware that you may have
trouble if you try to statically link your binary with glog: that is, if you
link with gcc -static -lgcc_eh ...
. This is because both libunwind
and
libgcc
implement the same C++ exception handling APIs, but they implement
them differently on some platforms. This is not likely to be a problem on
ia64, but may be on x86-64.
Also, if you link binaries statically, make sure that you add
-Wl,--eh-frame-hdr
to your linker options. This is required so that
libunwind
can find the information generated by the compiler required for
stack unwinding.
Using -static
is rare, though, so unless you know this will affect you it
probably won't.
Alternative Stack-unwinder¶
If you cannot or do not wish to install libunwind
, you can still try to use
two kinds of stack-unwinder:
glibc Built-in Stack-unwinder¶
As we already mentioned, glibc's unwinder has a deadlock issue. However, if you
don't use InstallFailureSignalHandler()
or you don't worry about the rare
possibilities of deadlocks, you can use this stack-unwinder. If you specify no
options and libunwind
isn't detected on your system, the configure script
chooses this unwinder by default.
Frame Pointer based Stack-unwinder¶
The frame pointer based stack unwinder requires that your application, the glog library, and system libraries like libc, all be compiled with a frame pointer. This is not the default for x86-64.