[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Symbol reference errors heimdal-0.6, solaris 8



Hi Love,

Thanks for your help here- its much appreciated.

> Are you sure you link with the extra libs libkrb5 needs, use krb5-config
> --libs to find what they are.
>
> $ nm /usr/heimdal/lib/libkrb5.a| grep krb5_set_error | sort -u
>          U krb5_set_error_string
> 00000050 T krb5_set_error_string
> $ krb5-config --libs
> -L/usr/heimdal/lib -lkrb5 -lasn1 -lcrypto -lroken -lcrypt

Its possible that when I tried to build the application (OpenLDAP) that I didn't include the correct libs.

> Can you give an example of a link error you get ?

Yep - I'll send a follow up.

However, I think the problem is actually with the heimdal libraries themselves.  After I 'make', and before I 'make install', I can run nm on lib/krb5/.libs/libkrb5.a and there are many many undefined symbols.  So I think that I have to fix the undefined symbol issue before anything will successfully link (correct?).

For example, this is partial output from '/usr/local/gnu/bin/nm -u -f sysv lib/krb5/.libs/libkrb5.a'.  There are so many missing symbols I arbitrarily decided to start and look at the undefined symbols from addr_families.o.

Undefined symbols from libkrb5.a[addr_families.o]:
krb5_data_alloc
krb5_data_copy
krb5_data_free
krb5_eai_to_heim_errno
krb5_ret_address
krb5_set_error_string
krb5_storage_free
krb5_storage_from_data
krb5_storage_seek
krb5_storage_set_byteorder

Then I ran '/usr/local/gnu/bin/objdump -t lib/krb5/addr_families.o |egrep 'krb5_'  to see all the krb5_* symbols that are missing.
0000000000000000         *UND*  0000000000000000 krb5_storage_seek
0000000000000000         *UND*  0000000000000000 krb5_data_copy
0000000000000000         *UND*  0000000000000000 krb5_storage_set_byteorder
0000000000000c88 g     F .text  000000000000004c krb5_sockaddr2port
0000000000000d50 g     F .text  0000000000000068 krb5_max_sockaddr_size
0000000000000c3c g     F .text  000000000000004c krb5_sockaddr2address
0000000000000000         *UND*  0000000000000000 _krb5_put_int
0000000000000000         *UND*  0000000000000000 _krb5_get_int
0000000000000000         *UND*  0000000000000000 krb5_storage_free
00000000000012c0 g     F .text  0000000000000054 krb5_free_addresses
0000000000001314 g     F .text  0000000000000048 krb5_copy_address
00000000000013e0 g     F .text  00000000000000f0 krb5_append_addresses
0000000000000cd4 g     F .text  000000000000007c krb5_addr2sockaddr
000000000000121c g     F .text  000000000000005c krb5_address_search
0000000000000ef0 g     F .text  00000000000000e4 krb5_print_address
0000000000000000         *UND*  0000000000000000 krb5_ret_address
0000000000000e50 g     F .text  000000000000004c krb5_h_addr2addr
0000000000000000         *UND*  0000000000000000 krb5_data_free
0000000000000000         *UND*  0000000000000000 krb5_storage_from_data
0000000000000000         *UND*  0000000000000000 krb5_set_error_string
0000000000000df8 g     F .text  0000000000000058 krb5_h_addr2sockaddr
0000000000000db8 g     F .text  0000000000000040 krb5_sockaddr_uninteresting
0000000000001278 g     F .text  0000000000000048 krb5_free_address
0000000000000fd4 g     F .text  0000000000000170 krb5_parse_address
00000000000011f8 g     F .text  0000000000000024 krb5_address_compare
000000000000135c g     F .text  0000000000000084 krb5_copy_addresses
0000000000000000         *UND*  0000000000000000 krb5_eai_to_heim_errno
0000000000000e9c g     F .text  0000000000000054 krb5_anyaddr
00000000000014d0 g     F .text  000000000000016c krb5_make_addrport
0000000000001144 g     F .text  00000000000000b4 krb5_address_order
0000000000000000         *UND*  0000000000000000 krb5_data_alloc

All of these symbols, with the execption of the two private functions, are found krb5-protos.h.  So I don't understand why for example krb5_storage_seek isn't found when krb5_sockaddr2port is found, when they are both defined in krb5-protos.h, included by the same file addr_families.c.

Could there be a name space collision somewhere?  e.g. OpenSSL used to define a crypt symbol, which stepped on the use of Solaris' libcrypt libraries crypt symbol...

Thanks again,
Elliot