From: Garrett C. <yan...@gm...> - 2009-11-15 00:06:51
|
On Fri, Nov 13, 2009 at 3:27 AM, Garrett Cooper <yan...@gm...> wrote: > On Thu, Nov 12, 2009 at 7:47 PM, Mike Frysinger <va...@ge...> wrote: >> On Thursday 12 November 2009 15:43:20 Garrett Cooper wrote: >>> On Mon, Nov 9, 2009 at 9:39 AM, Subrata Modak wrote: >>> > On Mon, 2009-11-09 at 07:49 -0500, Mike Frysinger wrote: >>> >> On Monday 09 November 2009 06:17:09 Subrata Modak wrote: >>> >> > I get the following failure with todayś CVS. ./configure has been done >>> >> > before make: >>> >> > >>> >> > gcc -g -O2 -g -O2 -fno-strict-aliasing -pipe -Wall >>> >> > -I/ltp-intermediate-20091109/testcases/kernel/include >>> >> > -I/ltp-intermediate-20091109/testcases/kernel/containers/mqns/../libcl >>> >> >one -I../../../../include -I../../../../include >>> >> > -L/ltp-intermediate-20091109/testcases/kernel/containers/mqns/../libc >>> >> >lone -L../../../../lib mqns_01.c -lltp -lclone -lpthread -lrt -o >>> >> > mqns_01 >>> >> > /ltp-intermediate-20091109/testcases/kernel/containers/mqns/../libclon >>> >> >e/li bclone.a(libclone.o): In function `do_clone_tests': >>> >> > /ltp-intermediate-20091109/testcases/kernel/containers/libclone/libcl >>> >> >one.c >>> >> > >>> >> > :25: undefined reference to `ltp_clone_quick' collect2: ld returned 1 >>> >> > : exit status >>> >> >>> >> should be fixed now. static lib linking order is picky. >>> > >>> > Thanks Mike. building fine now. >>> >>> When you switch that back though, it fails to compile on Gentoo. Hence >>> that's why I did `-lclone $(LDLIBS) -lpthread -lrt'. >> >> huh ? i test everything on gentoo, and this has been working for me. if ltp >> requires pthread/rt, that should be fixed in common code. the issue here is >> that libclone needs libltp symbols, and that's it. >> >>> Some autoconf tests need to be created to detect broken linkers like >>> this because it's really annoying doing this tug-of-war with the >>> library ordering... >> >> i dont think so ... start by posting the actual error messages you're seeing. >> -mike >> > > gcooper@orangebox /scratch/ltp-dev2/ltp/testcases/kernel/containers $ make all > make[1]: Entering directory > `/scratch/ltp-dev2/ltp/testcases/kernel/containers/mqns' > gcc -g -O2 -g -O2 -fno-strict-aliasing -pipe -Wall > -I/scratch/ltp-dev2/ltp/testcases/kernel/include > -I/scratch/ltp-dev2/ltp/testcases/kernel/containers/mqns/../libclone > -I../../../../include -I../../../../include > -L/scratch/ltp-dev2/ltp/testcases/kernel/containers/mqns/../libclone > -L../../../../lib mqns_01.c -lltp -o mqns_01 > /tmp/ccgIja6r.o: In function `mq_open': > /usr/include/bits/mqueue2.h:49: undefined reference to `mq_open' > /tmp/ccgIja6r.o: In function `main': > /scratch/ltp-dev2/ltp/testcases/kernel/containers/mqns/mqns_01.c:98: > undefined reference to `do_clone_unshare_test' > /scratch/ltp-dev2/ltp/testcases/kernel/containers/mqns/mqns_01.c:123: > undefined reference to `mq_close' > /scratch/ltp-dev2/ltp/testcases/kernel/containers/mqns/mqns_01.c:124: > undefined reference to `mq_unlink' > /tmp/ccgIja6r.o: In function `mq_open': > /usr/include/bits/mqueue2.h:49: undefined reference to `mq_open' > /tmp/ccgIja6r.o: In function `check_mqueue': > /scratch/ltp-dev2/ltp/testcases/kernel/containers/mqns/mqns_01.c:65: > undefined reference to `mq_close' > collect2: ld returned 1 exit status > make[1]: *** [mqns_01] Error 1 > make[1]: Leaving directory > `/scratch/ltp-dev2/ltp/testcases/kernel/containers/mqns' > make: *** [all] Error 2 > I finally resolved it. There's definitely a difference in behavior between ld with binutils 1.18 (my Gentoo desktop) and 1.19 (Fedora 11), where the linker ordering isn't being resolved properly when there are semi-codependent code blocks in libraries (which I think is the case here with ltp_clone_quick...). Thanks, -Garrett |