On Thursday 09 September 2010, Niels Mayer wrote:
Thanks for making this update available. All your
programs are very nice.
You are very kind.
One issue I've had w/ drumstick, perhaps ever
since I installed kmid
(*), is that when I "sudo make install", I end up with binaries that
don't work:
gnulem-301-.../drumstick-svn/build> /usr/local/bin/drumstick-testevents
/usr/local/bin/drumstick-testevents: error while loading shared
libraries: libdrumstick-alsa.so.0: cannot open shared object file: No
such file or directory
However, using the just built binary "in place" works fine:
You may be experiencing issues related to RPATH. The build system has this
feature (that I use in my projects) to link executables to libraries including
the whole library path into each executable. This is very convenient when you
are developing libraries and test programs together, because it allows you to
test the programs in place without installing them and without worrying about
environment variables like "LD_LIBRARY_PATH". CMake creates a "make
install"
command that shall relink the executables dropping the rpaths, so in a
production environment the programs behave as usual. More about this, here:
http://www.vtk.org/Wiki/CMake_RPATH_handling
To test if a program has RPATHs, use a command like this:
$ ldd /usr/local/bin/drumstick-playsmf
linux-gate.so.1 => (0xffffe000)
libQtCore.so.4 => /usr/lib/libQtCore.so.4 (0xb7498000)
libasound.so.2 => /usr/lib/libasound.so.2 (0xb73bc000)
libdrumstick-alsa.so.0 => /usr/local/lib/libdrumstick-alsa.so.0
(0xb735e000)
libdrumstick-file.so.0 => /usr/local/lib/libdrumstick-file.so.0
(0xb730c000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb721b000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb71fd000)
libc.so.6 => /lib/libc.so.6 (0xb7092000)
[...]
The above output shows a program that is installed without RPATH. The same
command on a program in my development directory shows this:
$ ldd build/bin/drumstick-playsmf
linux-gate.so.1 => (0xffffe000)
libQtCore.so.4 => /usr/lib/libQtCore.so.4 (0xb7602000)
libasound.so.2 => /usr/lib/libasound.so.2 (0xb7526000)
libdrumstick-alsa.so.0 =>
/home/pedro/Projects/drumstick/build/lib/libdrumstick-alsa.so.0 (0xb74c8000)
libdrumstick-file.so.0 =>
/home/pedro/Projects/drumstick/build/lib/libdrumstick-file.so.0 (0xb7476000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb7385000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb7367000)
libc.so.6 => /lib/libc.so.6 (0xb71fc000)
[...]
The distro's packaging process already takes care of all this. You can use
these features for your own convenience, but my advice is to clean your system
and install all the programs from the distro repositories, or install from
sources but use a recent cmake version and read the documentation about the
different options and features available. If you are unsure: uninstall the old
versions before compiling a new drumstick release, and uninstall the libraries
that are producing errors when running ldconfig.
Regards,
Pedro