[Fwd: Can I bother you with another Linux question?]

Ben Scott dragonhawk at gmail.com
Mon Nov 21 12:29:01 EST 2005


On 11/17/05, David J Berube <djberube at berubeconsulting.com> wrote:
> Anybody got an answer?
>
> ---------- Forwarded message ----------
> From: "Fletcher Lokey at Exacom" <fletcher.lokey at exacom.com>
> Date: Thu, 17 Nov 2005 09:03:59 -0500
> Subject: Can I bother you with another Linux question?
>
> /root/pcADeploy/thinhost: error while loading shared libraries: libXm.so.3:
> cannot open shared object file: No such file or directory

  Under Linux, a "shared object" is the equivalent of a DLL file under
MS-Windows.  It appears the PCAnywhere product depends on some dynamic
libraries which are not present on the system in question.

> ... I poked around on the Linux box here that is working, and found the file
> libXm.so.3 in usr/X11R6/lib ... I loaded the file over the wire to the system
> down there, in the same directory.

  You generally don't want to do that.  There are often "additional
steps" associated with installing program files.  It is also rare to
find a single file as a stand-alone unit; most often, groups of
related files need to be installed together.  This is true on Linux as
well as MS-Windows.

  Unlike MS-Windows, however, there are standard tools used on Linux
systems which manage program files, dependencies, installation, and so
on.  These tools are called "package managers".  Software components
are called "packages".  The package manager used on Red Hat is RPM
(Red Hat Package Manager).

  Obviously, PCAnywhere isn't using these package management tools, or
it would have warned you that it did not have the needed files.  :-(

  Anyway, the first thing you need to do is figure out what package
the file you need came from.  To do that, execute this command on a
system that has the file:

	rpm --query --file /usr/X11R6/lib/libXm.so.3

RPM should give you the name and version of the package (.rpm file)
which "owns" that file.  You can then install the proper package from
your Red Hat CDs and/or the network.  To install from CD, find the CD
that has the file, mount it, and do something like this:

	rpm --install /mnt/cdrom/RedHat/RPMS/XFree86-libs-x.y.z.i386.rpm

(The path and name of the file will likely be different.)  To install
via network, do something like this:

	up2date XFree86-libs

(Again, the name of the package may be different for you.)

> On a Google search I found a forum where someone asked the guy with the
> problem - is usr/X11R6/lib in your etc/ld.so.conf file?  From what I can gather
> that is a file that is like a PATH thing - telling you where you can find .so files?

  That's a fair analogy.  "ld.so" is the "loader for shared objects"
-- that is, the component that handles dynamic linking of shared
libraries.  The "ld.so.conf" is the config file for same, and exists
mainly to tell "ld.so" where to look for shared object (.so) files. 
One of the things RPM does for you is manage all that

  As Ken D'Ambrosio mentioned, running the "ldd" (ld dependencies)
command with the PCAnywhere file as an argument will tell you what
libraries a program depends on.  You could do this:

     ldd /root/pcADeploy/thinhost:

... to see the full list.

  Hope this helps!

-- Ben



More information about the gnhlug-discuss mailing list