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

Radu "Ux" D. raduda at itcnetworks.ro
Mon Sep 8 20:02:07 UTC 2008


Hummm, you are right.
Thx a lot, Radu

Mark Andrews wrote:
> 	You have the link order wrong.  -lbind9 should be before -lisccfg.
>
>   
>> 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):/exp
>> ort/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):/exp
>> ort/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):/exp
>> ort/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