CMPSHLIB(1)

NAME
cmpshlib - compare two shared libraries for compatibility

SYNOPSIS
cmpshlib [ -s spec_file ] [ -arch arch_type ] old new

DESCRIPTION
cmpshlib compares two versions of a target shared library to see if the changes introduced by the newer target shared library, new, are compatible with the older target shared library, old. This command makes the following checks: It verifies that the all of the old branch table targets have the same symbol in the new branch table and that all the old global data symbols have the same addresses.

With the -s spec_file option, global const data symbols ( #nobranch_text and not #private_externs ) are checked for the same addresses while #private_externs data symbols with different addresses are not reported. Also with the -s spec_file option, branch table slots that have names that change from the old version but remain compatible will not get errors if the optional branch table slot specifies old_name old_funcname where old_funcname is the name of the symbol in the old version. If this information is supplied, cmpshlib first checks for branch slot matching in the usual way and, if that fails, it checks for old_funcname matching to see if the branch table slot is compatible.

For ``universal'' target shared libraries, the -arch arch_type option specifies the architecture of the shared library to be checked. If the file old is a ``universal'' file that contains more than one architecture you must use this option. Only one -arch arch_type can be specified and only one architecture is checked. See arch(3) for the currently know arch_types.

SEE ALSO
mkshlib(1)

BUGS
Many other things, particularly in the host libraries, could be checked but are not. This command only catches most of the major problems. Also, any slot that was part of a range used for a symbol that was replaced by a new symbol is printed as a warning (this is not the case if .empty_slot is used).