Skip to content

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.

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.