188 Chapter 5

Creating and Using Libraries

Using Shared Libraries in 64-bit mode

ld -b file1.o -o libfile1.sl +h libfile1.1
ld -b file2.o -o libfile2.sl +h libfile2.1 -L. -lfile1
ld main.o -L. -lfile2 -lc
# move dependent lib so dld can’t find it
# dld won’t find library because we didn’t set the environment
# variable LD_LIBRARY_PATH and SHLIB_PATH
# By default, dld will look at the environment variables
# LD_LIBRARY_PATH and
# SHLIB_PATH when doing dynamic path searching unless +noenvvar
# is specified
mv libfile2.sl /var/tmp
ln -s /var/tmp/libfile2.sl /var/tmp/libfile2.1
a.out
dld.sl: Unable to find library ‘libfile2.1’
export SHLIB_PATH=/var/tmp
a.out
in file1
in file2
Library Example: 64-bit Mode Compatibility ModeLink

This example builds a compatibility mode library and does a

compatibility mode link. The +s option is not specified at link time, so

the dynamic loader does not look at any environment variables to do

dynamic path searching.

# build compatibility mode dlls
# libfile1.sl is a dependent of libfile2.sl
ld -b file1.o -o libfile1.sl +h libfile1.1
ld -b file2.o -o libfile2.sl +h libfile2.1 -L. -lfile1 +compat
ln -s libfile1.sl libfile1.1
ld main.o +compat -L. -lfile2 -lc
# move dependent lib so dld can’t find it. Even when we specify
SHLIB_PATH dld won’t be
# able to find the dependent because we didn’t link with +s
mv libfile2.sl /var/tmp
ln -s /var/tmp/libfile2.sl /var/tmp/libfile2.1
a.out
dld.sl: Unable to find library ‘1:./libfile2.1’
export SHLIB_PATH=/var/tmp
a.out
dld.sl: Unable to find library ‘1:./libfile2.1’

You can usechatr +s to enable a.out in file1 and file2:

chatr +s enable a.out