Linking error: libbind9.a doesn't find libisccfg.a methods

Radu "Ux" D. raduda at itcnetworks.ro
Sat Sep 6 14:02:04 UTC 2008


Hi

We are using the BIND libraries into our product internally. I can 
successfully build the product on Windows, Solaris 10, but I have 
problems on Linux RedHat. The problem linking on Linux is that linker 
doesn't find certain methods. The methods are compiled and are available 
in a static library.

What I've already done:
1. I checked the library and I see the methods in there (using objdump)
2. I ensured that the library I am looking to is the one considered by 
the linker (I renamed the library and the linker complained can't find 
it anymore)

Different outputs following:

i. the linker output
g++ -o <our executable> -g -g -Wall -Wformat -march=i586 -mtune=i586 
-Dlinux -D__i386 -D_POSIX_SOURCE -D_BSD_SOURCE -D_GNU_SOURCE -DX_LOCALE 
-L/export/raduda/bind-9.4.2-P2/linux/lib  -L. -L../../lib/util 
-L../../lib/nidsnmp                   -L../../lib/BINDlibs/libuc_new 
-L../../lib/BINDlibs/libjr 
-L../../thirdparty/openssl-0.9.8e/linux/lib                   
-L../../lib/BINDlibs/libcc 
-L../../lib/BINDlibs/libzsign                   
-L../../lib/BINDlibs/libcheck                   
-L../../thirdparty/Xerces2.7/linux/lib   -L/usr/lib    <our compiled 
objects> -Wl,-a,shared -lpthread -lc                  -Wl,-a,archive 
-lupdc -lnidsnmp -ljr -lnbccc -lzsign -lcheck                  -lutil 
-lisccfg -lbind9 -ldns -lisccc -lisc -lcrypto                  
-Wl,-a,shared -lxerces-c      -Wl,-rpath,/usr/lib
../../lib/util/libutil.a(netid_file.o)(.text+0xb33): In function 
`netid_create_temporary_file':
: warning: the use of `mktemp' is dangerous, better use `mkstemp'
/export/raduda/bind-9.4.2-P2/linux/lib/libbind9.a(check.o)(.text+0x915): 
In function `checkacl':
/export/raduda/bind-9.4.2-P2-no-openssl/lib/bind9/check.c:382: undefined 
reference to `cfg_acl_fromconfig'
/export/raduda/bind-9.4.2-P2/linux/lib/libbind9.a(check.o)(.text+0x1e44): 
In function `check_viewconf':
/export/raduda/bind-9.4.2-P2-no-openssl/lib/bind9/check.c:1417: 
undefined reference to `cfg_aclconfctx_init'
/export/raduda/bind-9.4.2-P2/linux/lib/libbind9.a(check.o)(.text+0x269a):/export/raduda/bind-9.4.2-P2-no-openssl/lib/bind9/check.c:1550: 
undefined reference to `cfg_aclconfctx_destroy'
/export/raduda/bind-9.4.2-P2/linux/lib/libbind9.a(check.o)(.text+0x38a0): 
In function `bind9_check_namedconf':
/export/raduda/bind-9.4.2-P2-no-openssl/lib/bind9/check.c:1746: 
undefined reference to `cfg_aclconfctx_init'
/export/raduda/bind-9.4.2-P2/linux/lib/libbind9.a(check.o)(.text+0x39a1):/export/raduda/bind-9.4.2-P2-no-openssl/lib/bind9/check.c:1765: 
undefined reference to `cfg_acl_fromconfig'
/export/raduda/bind-9.4.2-P2/linux/lib/libbind9.a(check.o)(.text+0x3e4e):/export/raduda/bind-9.4.2-P2-no-openssl/lib/bind9/check.c:1813: 
undefined reference to `cfg_aclconfctx_destroy'
collect2: ld returned 1 exit status
make: *** [nidnbcd] Error 1

ii. [raduda_4.6.0_linux_dyn] 0:20 dellux(raduda) /export/raduda> objdump 
-t  bind-9.4.2-P2/linux/lib/libisccfg.a
In archive bind-9.4.2-P2/linux/lib/libisccfg.a:

aclconf.o:     file format elf32-i386

SYMBOL TABLE:
00000000 l    df *ABS*  00000000 aclconf.c
00000000 l    d  .text  00000000
00000000 l    d  .data  00000000
00000000 l    d  .bss   00000000
00000000 l    d  .debug_abbrev  00000000
00000000 l    d  .debug_info    00000000
00000000 l    d  .debug_line    00000000
00000000 l    d  .rodata.str1.4 00000000
00000000 l    d  .rodata.str1.1 00000000
00000000 l    d  .debug_frame   00000000
00000000 l    d  .debug_loc     00000000
00000000 l    d  .debug_pubnames        00000000
00000000 l    d  .debug_aranges 00000000
00000000 l    d  .debug_ranges  00000000
00000000 l    d  .debug_str     00000000
00000000 l    d  .note.GNU-stack        00000000
00000000 l    d  .comment       00000000
00000000 g     F .text  00000015 cfg_aclconfctx_init
00000018 g     F .text  00000037 cfg_aclconfctx_destroy
00000000         *UND*  00000000 dns_acl_detach
00000050 g     F .text  00000784 cfg_acl_fromconfig
and following

I modified your code and moved entire content of aclconf.c into 
parser.c. Built the libisccfg.a again and tried linking again: it worked 
right away! Now libbind9.a doesn't complain!

I am aware that maybe isn't BIND related issue, still, do you have any 
idea WHY it happens like this?
And secondly, is my solution safe?

Thx, Radu
p.s. yes, it is BIND-9.4.2-P2


More information about the bind-users mailing list