To conclude the topic of using crle(1) and the observed error message:

 > ld.so.1: ps: fatal: /usr/lib/libc.so.1: wrong ELF class: ELFCLASS32
 > Killed

I had asked (in a private email):

 > If you run "truss -fe" you'll see the environment passed to each process.
 > Is LD_CONFIG shown to exist?

And the answer was that LD_CONFIG was set.  So, through a series of historic
events it seemed that a default configuration file was being created in
/var/ld/ld.config, but that an LD_CONFIG setting in /etc/profile was causing
all applications (32-bit and 64-bit) to see this one file.


Here's a wrap up of some of my clarifications and recommendations:


The 32-bit ld.so.1 looks for /var/ld/ld.config by default,
you do not have to set LD_CONFIG.

The 64-bit ld.so.1 looks for /var/ld/64/ld.config by default,
you do not have to set LD_CONFIG.

By setting LD_CONFIG, *all* processes that see this environment
variable are reading the associated configuration file.  So,
if this configuration file uses 32-bit paths, any 64-bit process
that sees the environment variable is being given bad information.
And similarly, if this configuration file uses 64-bit paths, any
32-bit process that sees the environment variable is being given
bad information.

Use LD_CONFIG to point to a "temporary" configuration file as you
experiment.  Better yet, use LD_CONFIG_32 and LD_CONFIG_64 to
be precise in regards the configuration files use.

Once happy with the configuration file, populate it in the
default location (/var/ld/ld.config or /var/ld/64/ld.config)
and remove any LD_CONFIG settings.

It would be more optimal, and perhaps less confusing to use:

    % crle -u -l /your/32-bit/libs:/3rd-party/32-bit/libs

This will create /var/ld/ld.config, and append your search paths
to the 32-bit system defaults.  This configuration file will be used by
default by all 32-bit processes.

    % crle -64 -u -l /your/64-bit/libs:/3rd-party/64-bit/libs

This will create /var/ld/64/ld.config, and append your search paths
to the 64-bit system defaults.  This configuration file will be used by
default by all 64-bit processes.

Unset LD_CONFIG.


It's obvious from these discussions that the crle(1) man page could do
with some improvement, so I'll work to populate the information above
into the man page over the coming months.


-- 

Rod.

Reply via email to