Re: Static library for gcc compiling

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Great thanks.

I repeated the test you did, but things looked different. ldl was still not found.
Still not sure what has caused the difference. Also, there is only libdl.so.1
not libdl.so on the search, is this correct?

Thanks,
Meng


gcc -c c_link_test.c
gcc -v -ldl  c_link_test.o -o c_link_test

Reading specs from /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2.3/specs
Configured with: ../configure --disable-nls --with-as=/usr/ccs/bin/as --with-ld=/usr/ccs/bin/ld
Thread model: posix
gcc version 3.2.3
 /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2.3/collect2 -V -Y P,/usr/ccs/lib:/usr/lib -Qy -o c_link_test /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2.3/crt1.o /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2.3/crti.o /usr/ccs/lib/values-Xa.o /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2.3/crtbegin.o -L/usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2.3 -L/usr/ccs/bin -L/usr/ccs/lib -L/usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2.3/../../.. -ldl c_link_test.o -lgcc -lgcc_eh -lc -lgcc -lgcc_eh -lc /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2.3/crtend.o /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2.3/crtn.o
ld: Software Generation Utilities - Solaris Link Editors: 5.8-1.282
ld: fatal: library -ldl: not found
ld: fatal: File processing errors. No output written to c_link_test
collect2: ld returned 1 exit status

truss -f -o out `which gcc` -v -ldl  c_link_test.o -o c_link_test
SAME MESSAGE ABOVE

grep libdl out
6411:   stat("/usr/lib/libdl.so.1", 0xFFBEE98C)         = 0
6411:   open("/usr/lib/libdl.so.1", O_RDONLY)           = 3
6412:   stat("/usr/lib/libdl.so.1", 0xFFBEE20C)         = 0
6412:   open("/usr/lib/libdl.so.1", O_RDONLY)           = 3
6414:   stat("/usr/lib/libdl.so.1", 0xFFBEDFB4)         = 0
6414:   open("/usr/lib/libdl.so.1", O_RDONLY)           = 6
6414:   open("/usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2.3/libdl.a", O_RDONLY) Err#2 ENOENT
6414:   open("/usr/ccs/bin/libdl.a", O_RDONLY)          Err#2 ENOENT
6414:   open("/usr/ccs/lib/libdl.a", O_RDONLY)          Err#2 ENOENT
6414:   open("/usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2.3/../../../libdl.a", O_RDONLY) Err#2 ENOENT
6414:   open("/usr/lib/libdl.a", O_RDONLY)              Err#2 ENOENT
6414:   open("/usr/openwin/lib/libdl.a", O_RDONLY)      Err#2 ENOENT
6414:   open("/usr/openwin/lib/X11/libdl.a", O_RDONLY)  Err#2 ENOENT
6414:   open("/usr/lib/X11/libdl.a", O_RDONLY)          Err#2 ENOENT
6414:   open("/usr/openwin/lib/libdl.a", O_RDONLY)      Err#2 ENOENT
6414:   open("~/lib/libdl.a", O_RDONLY)                 Err#2 ENOENT
6414:   open("/usr/X/lib/libdl.a", O_RDONLY)            Err#2 ENOENT
6414:   open("/usr/openwin/lib/X11/libdl.a", O_RDONLY)  Err#2 ENOENT
6414:   open("/usr/ccs/lib/libdl.a", O_RDONLY)          Err#2 ENOENT
6414:   open("/usr/lib/libdl.a", O_RDONLY)              Err#2 ENOENT

----- Original Message -----
From: Andy Howell <AndyHowell@xxxxxxxxxxxxx>
Date: Thu, 31 Jul 2003 23:01:15 -0500
To: Meng-Hsueh Chiang <mhchiang@xxxxxxxx>
Subject: Re: Static library for gcc compiling

> Meng-Hsueh Chiang,
> 
> 
> I made a little test:
> 
> #include <stdlib.h>
> #include <stdio.h>
> #include <dlfcn.h>
> 
> main()
> {
>          dlopen("you wont find me", RTLD_NOW);
>          printf("Link me\n");
> }
> 
> compiled it:
> 
> gcc -c c_link_test.c
> 
> Then linked it:
> 
> gcc -v -ldl  c_link_test.o -o c_link_test
> 
> Reading specs from /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.3/specs
> Configured with: ../configure --disable-nls --with-as=/usr/ccs/bin/as 
> --with-ld=/usr/ccs/bin/ld
> Thread model: posix
> gcc version 3.3
>   /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.3/collect2 -V -Y 
> P,/usr/ccs/lib:/usr/lib -Qy -o c_link_test 
> /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.3/crt1.o 
> /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.3/crti.o 
> /usr/ccs/lib/values-Xa.o 
> /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.3/crtbegin.o 
> -L/usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.3 -L/usr/ccs/bin 
> -L/usr/ccs/lib 
> -L/usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.3/../../.. -ldl 
> c_link_test.o -lgcc -lgcc_eh -lc -lgcc -lgcc_eh -lc 
> /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.3/crtend.o 
> /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.3/crtn.o
> ld: Software Generation Utilities - Solaris Link Editors: 5.8-1.279
> 
> ldd ./c_link_test
>          libdl.so.1 =>    /usr/lib/libdl.so.1
>          libc.so.1 =>     /usr/lib/libc.so.1
> 
> Aside from different files names and extra libs in your case, I can't 
> see what the difference is. I have a newer compiler, 3.3, and you have a 
> newer linker. Collect2 searches for c++ constructors and creates a c 
> fiel containing them, compiles it, and then passes it to the linker. I 
> was trying to find what its options mean, but only came across the above 
>   description. The only other thing I can suggest is run truss on gcc to 
> see what it is doing:
> 
> truss -f -o out `which gcc` -v -ldl  c_link_test.o -o c_link_test
> 
> This traces the system calls that gcc and it children (-f) are making 
> and writes them to the file out (-o).
> 
> "grep libdl out" shows where it is looking for libdl.so. Here is the 
> tail end of the search on my box:
> 
> 586:   open("/usr/local/lib/libdl.so", O_RDONLY)       Err#2 ENOENT
> 1586:   open("/usr/local/lib/libdl.a", O_RDONLY)        Err#2 ENOENT
> 1586:   open("./libdl.so", O_RDONLY)                    Err#2 ENOENT
> 1586:   open("./libdl.a", O_RDONLY)                     Err#2 ENOENT
> 1586:   open("/usr/ccs/lib/libdl.so", O_RDONLY)         Err#2 ENOENT
> 1586:   open("/usr/ccs/lib/libdl.a", O_RDONLY)          Err#2 ENOENT
> 1586:   open("/usr/lib/libdl.so", O_RDONLY)             = 7
> 
> Sorry I can't give you a better answer. Maybe someone on the list can help.
> 
> Andy
> 
> 
> 
> > Andy,
> > 
> > I tried the gcc command and made it all dynamic, so it should not have any issue with static -ldl.
> > But it still said -ldl not found as follow (-v mode was used for your information).
> > Could you please give me some clue? I sincerely appreciate that.
> > Meng
> > 
> > gcc -v -o spice3 spice3.o  ./../../src/lib/misc.a -L/usr/openwin/lib -lXaw -lXt -lXext -lXmu -lX11 -lm -ltermlib -lsocket -lnsl -ldl                               
> > 
> > Reading specs from /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2.3/specs
> > Configured with: ../configure --disable-nls --with-as=/usr/ccs/bin/as --with-ld=/usr/ccs/bin/ld
> > Thread model: posix
> > gcc version 3.2.3
> >  /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2.3/collect2 -V -Y P,/usr/ccs/lib:/usr/lib -Qy -o spice3 /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2.3/crt1.o /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2.3/crti.o /usr/ccs/lib/values-Xa.o /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2.3/crtbegin.o -L/usr/openwin/lib -L/usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2.3 -L/usr/ccs/bin -L/usr/ccs/lib -L/usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2.3/../../.. spice3.o  ./../../src/lib/misc.a -lXaw -lXt -lXext -lXmu -lX11 -lm -ltermlib -lsocket -lnsl -ldl -lgcc -lgcc_eh -lc -lgcc -lgcc_eh -lc /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2.3/crtend.o /usr/local/lib/gcc-lib/sparc-sun-solaris2.8/3.2.3/crtn.o
> > ld: Software Generation Utilities - Solaris Link Editors: 5.8-1.282
> > ld: fatal: library -ldl: not found
> > ld: fatal: File processing errors. No output written to spice3
> > collect2: ld returned 1 exit status
> > 
> > 
> > ----- Original Message -----
> > From: Andy Howell <AndyHowell@xxxxxxxxxxxxx>
> > Date: Thu, 31 Jul 2003 11:09:08 -0500
> > To: Meng-Hsueh Chiang <mhchiang@xxxxxxxx>
> > Subject: Re: Static library for gcc compiling
> > 
> > 
> >>Meng-Hsueh Chiang wrote:
> >>
> >>>Thank you Andy for your helpful suggestion.
> >>>It did finish the compiling. But when I ran the executable, core dumped.
> >>>
> >>>Somehow, long time ago, I could compile it on my previous machine with
> >>>gcc -o spice spice3.o  ./../../src/lib/misc.a -L/usr/lib -lXaw -lXt -lXext -lXmu -lX11 -lw -lm -ltermlib -lsocket -lnsl -ldl
> >>>and got no complaint (I didn't see the problem before).
> >>
> >>Ok, no directives on the compile command to make it static, so its all 
> >>dynamic. Looks fine.
> >>
> >>
> >>>ldd spice
> >>>        libXaw.so.5 =>   /usr/lib/libXaw.so.5
> >>>        libXt.so.4 =>    /usr/lib/libXt.so.4
> >>>        libXext.so.0 =>  /usr/lib/libXext.so.0
> >>>        libXmu.so.4 =>   /usr/lib/libXmu.so.4
> >>>        libX11.so.4 =>   /usr/lib/libX11.so.4
> >>>        libw.so.1 =>     /usr/lib/libw.so.1
> >>>        libm.so.1 =>     /usr/lib/libm.so.1
> >>>        libcurses.so.1 =>        /usr/lib/libcurses.so.1
> >>>        libsocket.so.1 =>        /usr/lib/libsocket.so.1
> >>>        libnsl.so.1 =>   /usr/lib/libnsl.so.1
> >>>        libdl.so.1 =>    /usr/lib/libdl.so.1
> >>>        libc.so.1 =>     /usr/lib/libc.so.1
> >>>        libSM.so.6 =>    /usr/lib/libSM.so.6
> >>>        libICE.so.6 =>   /usr/lib/libICE.so.6
> >>>        libdga.so.1 =>   /usr/openwin/lib/libdga.so.1
> >>>        libmp.so.2 =>    /usr/lib/libmp.so.2
> >>>        /usr/platform/SUNW,Sun-Blade-1000/lib/libc_psr.so.1
> >>>
> >>>But now with Xlinker (as you suggeted in order to overcome -ldl issue)
> >>>gcc -o spice spice.o ./../../src/lib/misc.a -L/usr/lib -lXaw -lXt -lXext -Bstatic -lXmu -Bdynamic -lX11 -lm -ltermlib -lsocket -lnsl -Xlinker -B -Xlinker dynamic -ldl -Xlinker -B -Xlinker static
> >>>
> >>>ldd spice
> >>>        libdl.so.1 =>    /usr/lib/libdl.so.1
> >>
> >>Hmm, thats kind of wierd. I would have expected lib Xmu to be static and 
> >>everything else to be dynamic. Try -v on the compile line, I think that 
> >>shows what it being passed to the linker.
> >>
> >>
> >>>The library list is a lot shorter. Seems strange? Could you please give me some clues?
> >>>Also, what would be causing the -ldl issue for my new system ? I know the SunOS, and gcc 
> >>>are different.
> >>
> >>I have made Solaris 5.8 binaries with mixed dynamic and static libs, so 
> >>I know that it works. The trick is getting options in the right order...
> >>
> >>Andy
> >>
> >>
> >>>Thanks a lot,
> >>>Meng
> >>>
> >>>----- Original Message -----
> >>>From: Andy Howell <AndyHowell@xxxxxxxxxxxxx>
> >>>Date: Wed, 30 Jul 2003 22:55:13 -0500
> >>>To: Meng-Hsueh Chiang <mhchiang@xxxxxxxx>
> >>>Subject: Re: Static library for gcc compiling
> >>>
> >>>
> >>>
> >>>>Meng-Hsueh Chiang wrote:
> >>>>
> >>>>
> >>>>>I am getting undefined symbol (_dlclose, _dlopen, _dlsym) errors
> >>>>
> >>>>>from gcc compiling.
> >>>>
> >>>>>If I added -ldl after gcc to resolve the issue, it said 
> >>>>>"ld: fatal: library -ldl: not found"
> >>>>>because Sun didn't include a static version of `libdl.a' in /usr/lib.
> >>>>>Does anyone know where I can get the file libdl.a for Solaris?
> >>>>>or is there any workaround solution?
> >>>>>
> >>>>>Thanks a lot in advance!
> >>>>>
> >>>>>
> >>>>
> >>>>You should be able to add
> >>>>-Xlinker -B -Xlinker dynamic -ldl -Xlinker -B -Xlinker static
> >>>>
> >>>>around it get it to work. Its been awhile since I've done it. You might 
> >>>>have to play with the positioning of this in the link line.
> >>>>
> >>>>Andy
> >>>>
> >>>
> >>>
> >>>
> >>
> > 
> > 
> 
> 


[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux