On Thu, 8 Dec 2005, Thinus Viljoen wrote:
Hi
(I posted this question on the geda-user list before I saw this development
list, sorry for the cross-post)
I am using Debian version 3.1 ("Sarge"). I installed the following packages
from the Debian CDs via Synaptic in an attempt to get gwave functional:
guile-1.6-libs version 1.6.7-1
libguilegtk-1.2-0 version 0.31-3
gwave version 20031224-2
When I run gwave, I get the following error:
gwave: relocation error: /usr/lib/libguilegtk-1.2.so.0: undefined symbol:
coop_mutex_lock
Any help to get rid of this error will be appreciated.
I found "coop_mutex_lock" by greping around in the guile-1.6.7 source.
I think what's going on is that one or both of the libguilegtk or gwave
package you have were not built against that exact guile packge, but
rather one configured differently or perhaps an older version.
From the error it looks like the problem is in the libguilegtk package, as
gwave doesn't use that symbol directly at all.
In short, if those packages were intended to work together, one of them
could be considered defective.
You might be able to query whoever built those debian binary packages.
Or, installing the development packages for guile-1.6.7 and then
rebuilding the guile-gtk package followed by the gwave package from
source would probalby work.
The above looks like a slightly different case of the same general issue
that this item in the building-gwave FAQ is about:
Q. Everything builds OK but when I try running gwave I get the following
message: "relocation error: undefined symbol: scm_root"
A. Oh, the joy of shared libraries - nothing is fully done linking until
you actually run it.
A tour through the guile-1.6.7 source yields what "scm_root" is all
about and some hints as to fixing this problem.
Guile's scm_root is either a global pointer or a macro that expands to
somthing accessing thread-local data, depending on whether or not
guile's configure decided to build with threads or not.
That configure result gets communicated by the USE_THREADS #define in
libguile/scmconfig.h, which should get constructed and installed
into $prefix/include at guile build time. This ghen gets used by
the guile-gtk and gwave build process to do the right thing.
This "scm_root" error means that somehow the USE_THREADS setting got
miscommunicated from the guile build process to the guile-gtk and/or gwave
builds. Here are some things to check:
1. Did the guile build+install process install its include files?
2. Did guile-gtk and gwave find the _right_ guile includes?
3. When you run gwave, is it finding the matching libguile.so shared libs?
("ldd gwave" will list what shared libraries it is finding.
LD_LIBRARY_PATH can influence that)
4. Are there any other versions of guile laying around?
If, for example, you have a guile in /usr but installed another
version in /usr/local, preventing your compiler from seeing the
one in /usr first can be very difficult.
Steve