58 lines
2.5 KiB
Markdown
58 lines
2.5 KiB
Markdown
# 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](#glibc-built-in-stack-unwinder) on 64-bit
|
|
systems has some problems with glog. In particular, if you are using
|
|
[`InstallFailureSignalHandler()`](failures.md), 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](http://download.savannah.nongnu.org/releases/libunwind/libunwind-snap-070410.tar.gz).
|
|
|
|
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.
|