From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 11154 invoked by alias); 22 Feb 2009 01:29:28 -0000 Received: (qmail 11140 invoked by uid 22791); 22 Feb 2009 01:29:25 -0000 X-SWARE-Spam-Status: No, hits=-1.0 required=5.0 tests=AWL,BAYES_00 X-Spam-Check-By: sourceware.org Received: from host671420017099.direcway.com (HELO aexorsyst.com) (67.142.99.170) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sun, 22 Feb 2009 01:29:18 +0000 Received: from hades.aexorsyst.com (hades.aexorsyst.com [192.168.1.4]) by aexorsyst.com (8.13.6/8.13.6) with ESMTP id n1M1T02f013347 for ; Sat, 21 Feb 2009 17:29:01 -0800 From: "John Z. Bohach" To: gcc-help@gcc.gnu.org Subject: collect2/ld doesn't search all paths dumped by gcc -print-search-dirs Date: Sun, 22 Feb 2009 01:29:00 -0000 User-Agent: KMail/1.9.6 MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200902211728.59486.jzb2@aexorsyst.com> X-IsSubscribed: yes Mailing-List: contact gcc-help-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-help-owner@gcc.gnu.org X-SW-Source: 2009-02/txt/msg00143.txt.bz2 I'm trying to build a tiny test program using an alternate toolchain built purely from source (LFS ch. 5 method), but collect2 says that ld can't find a lib. that _does_ exist under /usr/lib, but /usr/lib is not even attempted as part of the search, even though /usr/lib _is_ part of the library search path dumped by "gcc -print-search-dirs". Bizarre...what am I misunderstanding? Here are the particulars: The program I'm building: #include int main() { printf("Ok\n"); return(0); } The build command line: /tools/bin/gcc -o try -O2 -fno-strict-aliasing -pipe -Wdeclaration-after-statement -I/usr/local/include -L/usr/local/lib try.c -lnsl -lgdbm -ldb -ldl -lm -lcrypt -lutil -lc -Wl,--verbose The failure: /data/devo/builds/i686-pc-linux-uclibc/orsus-2/rootfs/tools/bin/../lib/gcc/i686-pc-linux-uclibc/4.2.2/../../../../i686-pc-linux-uclibc/bin/ld: cannot find -lgdbm collect2: ld returned 1 exit status The pertinent parts of the -Wl,--verbose output from the build attempt: GNU ld (GNU Binutils) 2.18 Supported emulations: elf_i386 i386linux using internal linker script: ================================================== /* Script for -z combreloc: combine and sort reloc sections */ OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386") OUTPUT_ARCH(i386) ENTRY(_start) SEARCH_DIR("/tools/i686-pc-linux-uclibc/lib"); SEARCH_DIR("/tools/lib"); ... attempt to open /usr/local/lib/libgdbm.so failed attempt to open /usr/local/lib/libgdbm.a failed attempt to open /data/devo/builds/i686-pc-linux-uclibc/orsus-2/rootfs/tools/bin/../lib/gcc/i686-pc-linux-uclibc/4.2.2/libgdbm.so failed attempt to open /data/devo/builds/i686-pc-linux-uclibc/orsus-2/rootfs/tools/bin/../lib/gcc/i686-pc-linux-uclibc/4.2.2/libgdbm.a failed attempt to open /data/devo/builds/i686-pc-linux-uclibc/orsus-2/rootfs/tools/bin/../lib/gcc/libgdbm.so failed attempt to open /data/devo/builds/i686-pc-linux-uclibc/orsus-2/rootfs/tools/bin/../lib/gcc/libgdbm.a failed attempt to open /tools/lib/gcc/i686-pc-linux-uclibc/4.2.2/libgdbm.so failed attempt to open /tools/lib/gcc/i686-pc-linux-uclibc/4.2.2/libgdbm.a failed attempt to open /usr/lib/gcc/i686-pc-linux-uclibc/4.2.2/libgdbm.so failed attempt to open /usr/lib/gcc/i686-pc-linux-uclibc/4.2.2/libgdbm.a failed attempt to open /data/devo/builds/i686-pc-linux-uclibc/orsus-2/rootfs/tools/bin/../lib/gcc/i686-pc-linux-uclibc/4.2.2/../../../../i686-pc-linux-uclibc/lib/libgdbm.so failed attempt to open /data/devo/builds/i686-pc-linux-uclibc/orsus-2/rootfs/tools/bin/../lib/gcc/i686-pc-linux-uclibc/4.2.2/../../../../i686-pc-linux-uclibc/lib/libgdbm.a failed attempt to open /tools/lib/gcc/i686-pc-linux-uclibc/4.2.2/../../../../i686-pc-linux-uclibc/lib/libgdbm.so failed attempt to open /tools/lib/gcc/i686-pc-linux-uclibc/4.2.2/../../../../i686-pc-linux-uclibc/lib/libgdbm.a failed attempt to open /data/devo/builds/i686-pc-linux-uclibc/orsus-2/rootfs/tools/bin/../lib/gcc/i686-pc-linux-uclibc/4.2.2/../../../libgdbm.so failed attempt to open /data/devo/builds/i686-pc-linux-uclibc/orsus-2/rootfs/tools/bin/../lib/gcc/i686-pc-linux-uclibc/4.2.2/../../../libgdbm.a failed attempt to open /tools/lib/gcc/i686-pc-linux-uclibc/4.2.2/../../../libgdbm.so failed attempt to open /tools/lib/gcc/i686-pc-linux-uclibc/4.2.2/../../../libgdbm.a failed attempt to open /data/devo/builds/i686-pc-linux-uclibc/orsus-2/rootfs/tools/i686-pc-linux-uclibc/bin/../lib/libgdbm.so failed attempt to open /data/devo/builds/i686-pc-linux-uclibc/orsus-2/rootfs/tools/i686-pc-linux-uclibc/bin/../lib/libgdbm.a failed attempt to open /tools/i686-pc-linux-uclibc/lib/libgdbm.so failed attempt to open /tools/i686-pc-linux-uclibc/lib/libgdbm.a failed attempt to open /tools/lib/libgdbm.so failed attempt to open /tools/lib/libgdbm.a failed And the thing that makes this bizarre: /tools/bin/gcc -print-search-dirs | sed 's/:/\n/g' install /tools/lib/gcc/i686-pc-linux-uclibc/4.2.2/ programs =/data/devo/builds/i686-pc-linux-uclibc/orsus-2/rootfs/tools/bin/../libexec/gcc/i686-pc-linux-uclibc/4.2.2/ /data/devo/builds/i686-pc-linux-uclibc/orsus-2/rootfs/tools/bin/../libexec/gcc/ /tools/libexec/gcc/i686-pc-linux-uclibc/4.2.2/ /tools/libexec/gcc/i686-pc-linux-uclibc/4.2.2/ /tools/libexec/gcc/i686-pc-linux-uclibc/ /tools/lib/gcc/i686-pc-linux-uclibc/4.2.2/ /tools/lib/gcc/i686-pc-linux-uclibc/ /usr/libexec/gcc/i686-pc-linux-uclibc/4.2.2/ /usr/libexec/gcc/i686-pc-linux-uclibc/ /usr/lib/gcc/i686-pc-linux-uclibc/4.2.2/ /usr/lib/gcc/i686-pc-linux-uclibc/ /data/devo/builds/i686-pc-linux-uclibc/orsus-2/rootfs/tools/bin/../lib/gcc/i686-pc-linux-uclibc/4.2.2/../../../../i686-pc-linux-uclibc/bin/i686-pc-linux-uclibc/4.2.2/ /data/devo/builds/i686-pc-linux-uclibc/orsus-2/rootfs/tools/bin/../lib/gcc/i686-pc-linux-uclibc/4.2.2/../../../../i686-pc-linux-uclibc/bin/ /tools/lib/gcc/i686-pc-linux-uclibc/4.2.2/../../../../i686-pc-linux-uclibc/bin/i686-pc-linux-uclibc/4.2.2/ /tools/lib/gcc/i686-pc-linux-uclibc/4.2.2/../../../../i686-pc-linux-uclibc/bin/ libraries =/data/devo/builds/i686-pc-linux-uclibc/orsus-2/rootfs/tools/bin/../lib/gcc/i686-pc-linux-uclibc/4.2.2/ /data/devo/builds/i686-pc-linux-uclibc/orsus-2/rootfs/tools/bin/../lib/gcc/ /tools/lib/gcc/i686-pc-linux-uclibc/4.2.2/ /usr/lib/gcc/i686-pc-linux-uclibc/4.2.2/ /data/devo/builds/i686-pc-linux-uclibc/orsus-2/rootfs/tools/bin/../lib/gcc/i686-pc-linux-uclibc/4.2.2/../../../../i686-pc-linux-uclibc/lib/i686-pc-linux-uclibc/4.2.2/ /data/devo/builds/i686-pc-linux-uclibc/orsus-2/rootfs/tools/bin/../lib/gcc/i686-pc-linux-uclibc/4.2.2/../../../../i686-pc-linux-uclibc/lib/ /tools/lib/gcc/i686-pc-linux-uclibc/4.2.2/../../../../i686-pc-linux-uclibc/lib/i686-pc-linux-uclibc/4.2.2/ /tools/lib/gcc/i686-pc-linux-uclibc/4.2.2/../../../../i686-pc-linux-uclibc/lib/ /data/devo/builds/i686-pc-linux-uclibc/orsus-2/rootfs/tools/bin/../lib/gcc/i686-pc-linux-uclibc/4.2.2/../../../i686-pc-linux-uclibc/4.2.2/ /data/devo/builds/i686-pc-linux-uclibc/orsus-2/rootfs/tools/bin/../lib/gcc/i686-pc-linux-uclibc/4.2.2/../../../ /tools/lib/gcc/i686-pc-linux-uclibc/4.2.2/../../../i686-pc-linux-uclibc/4.2.2/ /tools/lib/gcc/i686-pc-linux-uclibc/4.2.2/../../../ /lib/i686-pc-linux-uclibc/4.2.2/ /lib/ /usr/lib/i686-pc-linux-uclibc/4.2.2/ /usr/lib/ Note the /usr/lib on the last line! Just for reference, ls -al /usr/lib/libgdbm* -rw-r--r-- 1 root root 123184 2009-02-11 16:05 /usr/lib/libgdbm.a -rw-r--r-- 1 root root 83410 2009-02-11 16:05 /usr/lib/libgdbm_compat.a So WHY is /usr/lib NOT being searched by ld? Isn't collect2 supposed to pass on the same library paths as dumped by gcc -print-search-dirs to ld? Any ideas? FYI: /tools/bin/gcc -dumpspecs *asm: %{v:-V} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*} *asm_debug: %{gstabs*:--gstabs}%{!gstabs*:%{g*:--gdwarf2}} *asm_final: *asm_options: %a %Y %{c:%W{o*}%{!o*:-o %w%b%O}}%{!c:-o %d%w%u%O} *invoke_as: %{!S:-o %|.s | as %(asm_options) %|.s %A } *cpp: %{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT} *cpp_options: %(cpp_unique_options) %1 %{m*} %{std*&ansi&trigraphs} %{W*&pedantic*} %{w} %{f*} %{g*: %{!g0: %{!fno-working-directory:-fworking-directory}}} %{O*} %{undef} %{save-temps:-fpch-preprocess} *cpp_debug_options: %{d*} *cpp_unique_options: %{C|CC:%{!E:%eGCC does not support -C or -CC without -E}} %{!Q:-quiet} %{nostdinc*} %{C} %{CC} %{v} %{I*&F*} %{P} %I %{MD:-MD %{!o: %b.d}%{o*:%.d%*}} %{MMD:-MMD %{!o:%b.d}%{o*: %.d%*}} %{M} %{MM} %{MF*} %{MG} %{MP} %{MQ*} %{MT*} %{!E:%{!M:%{!MM: %{MD|MMD: %{o*:-MQ %*}}}}} %{remap} %{g3:-dD} %{H} %C %{D*&U*&A*} %{i*} %Z %i %{fmudflap:-D_MUDFLAP -include mf-runtime.h} %{fmudflapth:-D_MUDFLAP -D_MUDFLAPTH -include mf-runtime.h} %{E|M|MM:%W{o*}} *trad_capable_cpp: cc1 -E %{traditional|ftraditional|traditional-cpp:-traditional-cpp} *cc1: %(cc1_cpu) %{profile:-p} *cc1_options: %{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}} %1 %{!Q:-quiet} -dumpbase %B %{d*} %{m*} %{a*} %{c|S: %{o*:-auxbase-strip %*}%{!o*:-auxbase %b}}%{!c: %{!S:-auxbase %b}} %{g*} %{O*} %{W*&pedantic*} %{w} %{std*&ansi&trigraphs} %{v:-version} %{pg:-p} %{p} %{f*} %{undef} %{Qn:-fno-ident} %{--help:--help} %{--target-help:--target-help} %{!fsyntax-only: %{S:%W{o*}%{!o*:-o %b.s}}} %{fsyntax-only:-o %j} %{-param*} %{fmudflap| fmudflapth:-fno-builtin -fno-merge-constants} %{coverage:-fprofile-arcs -ftest-coverage} *cc1plus: *link_gcc_c_sequence: %{static:--start-group} %G %L %{static:--end-group}%{!static:%G} *link_ssp: %{fstack-protector|fstack-protector-all:-lssp_nonshared -lssp} *endfile: %{ffast-math|funsafe-math-optimizations:crtfastmath.o%s} %{shared| pie:crtendS.o%s;:crtend.o%s} crtn.o%s *link: %{!static:--eh-frame-hdr} -m %(link_emulation) %{shared:-shared} %{!shared: %{!ibcs: %{!static: %{rdynamic:-export-dynamic} %{!dynamic-linker:-dynamic-linker %(dynamic_linker)}} %{static:-static}}} *lib: %{pthread:-lpthread} %{shared:-lc} %{!shared: %{mieee-fp:-lieee} %{profile:-lc_p}%{!profile:-lc}} *mfwrap: %{static: %{fmudflap| fmudflapth: --wrap=malloc --wrap=free --wrap=calloc --wrap=realloc --wrap=mmap --wrap=munmap --wrap=alloca} %{fmudflapth: --wrap=pthread_create}} %{fmudflap| fmudflapth: --wrap=main} *mflib: %{fmudflap|fmudflapth: -export-dynamic} *link_gomp: *libgcc: %{static|static-libgcc:-lgcc -lgcc_eh}%{!static:%{!static-libgcc: %{!shared-libgcc:-lgcc --as-needed -lgcc_s --no-as-needed}%{shared-libgcc:-lgcc_s%{!shared: -lgcc}}}} *startfile: %{!shared: %{pg|p|profile:gcrt1.o%s;pie:Scrt1.o%s;:crt1.o%s}} crti.o%s %{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s} *switches_need_spaces: *cross_compile: 0 *version: 4.2.2 *multilib: . ; *multilib_defaults: *multilib_extra: *multilib_matches: *multilib_exclusions: *multilib_options: *linker: collect2 *link_libgcc: %D *md_exec_prefix: *md_startfile_prefix: *md_startfile_prefix_1: *startfile_prefix_spec: *sysroot_spec: --sysroot=%R *sysroot_suffix_spec: *sysroot_hdrs_suffix_spec: *cc1_cpu: %{!mtune*: %{m386:mtune=i386 %n`-m386' is deprecated. Use `-march=i386' or `-mtune=i386' instead. } %{m486:-mtune=i486 %n`-m486' is deprecated. Use `-march=i486' or `-mtune=i486' instead. } %{mpentium:-mtune=pentium %n`-mpentium' is deprecated. Use `-march=pentium' or `-mtune=pentium' instead. } %{mpentiumpro:-mtune=pentiumpro %n`-mpentiumpro' is deprecated. Use `-march=pentiumpro' or `-mtune=pentiumpro' instead. } %{mcpu=*:-mtune=%* %n`-mcpu=' is deprecated. Use `-mtune=' or '-march=' instead. }} %