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