[Bug driver/39439] New: The Driver hides undefined reference messages from shared libs (but not object files) in linker phase

2009-03-11 Thread rob1weld at aol dot com
The Driver hides undefined reference messages from shared libs but 
not from object files. This seems inconsistent and is not helpful.

When compiling 'ppl' using the Trunk I'm getting a terse message
about undefined reference to `typeinfo for int'. This is not
particularly useful since the words are common (can't grep for
them) and there is no line number info explaining the location of
the code that causes this issue.

This page may suggest a reason this error occurs:
http://stackoverflow.com/questions/307352/g-undefined-reference-to-typeinfo


I'm calling this an RFE since I desire an increase in verbosity
but there are no doubt arguments favoring this being a Bug.


# gcc -v
Using built-in specs.
Target: i386-pc-solaris2.11
Configured with: ../gcc_trunk/configure --prefix=/usr/local/gcc4
--enable-languages=ada,c,c++,fortran,java,objc,obj-c++ --enable-shared
--disable-static --enable-multilib --enable-decimal-float
--with-long-double-128 --with-included-gettext --disable-stage1-checking
--enable-checking=release --with-tune=k8 --with-cpu=k8 --with-arch=k8
--with-gnu-as --with-as=/usr/local/bin/as --with-gnu-ld
--with-ld=/usr/local/bin/ld --with-gmp=/usr/local --with-mpfr=/usr/local
--without-ppl
Thread model: posix
gcc version 4.4.0 20090309 (experimental) [trunk revision 144720] (GCC) 


# gmake
...
gmake[4]: Entering directory `/usr/share/src/ppl-build/demos/ppl_lpsol'
gcc -DHAVE_CONFIG_H -I. -I../../../ppl/demos/ppl_lpsol -I../.. 
-I../../interfaces/C  -I/usr/local/include -pedantic -std=gnu89 -Werror -g -O3
-fomit-frame-pointer -march=k8 -frounding-math  -W -Wall -MT ppl_lpsol.o -MD
-MP -MF .deps/ppl_lpsol.Tpo -c -o ppl_lpsol.o
../../../ppl/demos/ppl_lpsol/ppl_lpsol.c
mv -f .deps/ppl_lpsol.Tpo .deps/ppl_lpsol.Po
/bin/sh ../../libtool --tag=CXX   --mode=link g++  -g -O3 -fomit-frame-pointer
-march=k8 -frounding-math  -W -Wall   -o ppl_lpsol ppl_lpsol.o dummy.o -lglpk
../../interfaces/C/libppl_c.la -lm -L/usr/local/lib -lgmpxx -L/usr/local/lib
-lgmp -R/usr/local/lib -R/usr/local/lib 
libtool: link: g++ -g -O3 -fomit-frame-pointer -march=k8 -frounding-math -W
-Wall -o .libs/ppl_lpsol ppl_lpsol.o dummy.o  /usr/local/lib/libglpk.so -lz
../../interfaces/C/.libs/libppl_c.so -L/usr/local/lib
/usr/share/src/ppl-build/src/.libs/libppl.so /usr/local/lib/libstdc++.so
/usr/local/lib/libgmpxx.so /usr/local/gcc4/lib/libstdc++.so -lm
/usr/local/lib/libgmp.so -Wl,-rpath -Wl,/usr/local/lib -Wl,-rpath
-Wl,/usr/local/gcc4/lib
../../interfaces/C/.libs/libppl_c.so: undefined reference to `typeinfo for int'
collect2: ld returned 1 exit status
gmake[4]: *** [ppl_lpsol] Error 1
gmake[4]: Leaving directory `/usr/share/src/ppl-build/demos/ppl_lpsol'


If I run that using -v I get this collect command:

/usr/local/gcc4/libexec/gcc/i386-pc-solaris2.11/4.4.0/collect2 -V -m elf_i386
-Y P,/usr/ccs/lib:/usr/lib -Qy -o .libs/ppl_lpsol /usr/lib/crt1.o
/usr/lib/crti.o /usr/lib/values-Xa.o
/usr/local/gcc4/lib/gcc/i386-pc-solaris2.11/4.4.0/crtbegin.o -L/usr/local/lib
-L/usr/local/gcc4/lib/gcc/i386-pc-solaris2.11/4.4.0
-L/usr/local/gcc4/lib/gcc/i386-pc-solaris2.11/4.4.0/../../.. ppl_lpsol.o
dummy.o --verbose /usr/local/lib/libglpk.so -lz
../../interfaces/C/.libs/libppl_c.so
/usr/share/src/ppl-build/src/.libs/libppl.so /usr/local/lib/libstdc++.so
/usr/local/lib/libgmpxx.so /usr/local/gcc4/lib/libstdc++.so
/usr/local/lib/libgmp.so -rpath /usr/local/lib -rpath /usr/local/gcc4/lib
-lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc
/usr/local/gcc4/lib/gcc/i386-pc-solaris2.11/4.4.0/crtend.o /usr/lib/crtn.o


If I run that then I get this simple and useless output:

../../interfaces/C/.libs/libppl_c.so: undefined reference to `typeinfo for int'
collect2: ld returned 1 exit status


If I run that exact same command but make a simple alteration:
- ... -lz ../../interfaces/C/.libs/libppl_c.so
+ ... -lz ../../interfaces/C/.libs/*.o

I can use the Object files that were used to create the Shared Library
instead of using the Shared Library. This is useful (due to this
Bug or needed RFE) since the error messages printed are by _far_ more
useful, see:

# /usr/local/gcc4/libexec/gcc/i386-pc-solaris2.11/4.4.0/collect2 -V -m elf_i386
-Y P,/usr/ccs/lib:/usr/lib -Qy -o .libs/ppl_lpsol /usr/lib/crt1.o
/usr/lib/crti.o /usr/lib/values-Xa.o
/usr/local/gcc4/lib/gcc/i386-pc-solaris2.11/4.4.0/crtbegin.o -L/usr/local/lib
-L/usr/local/gcc4/lib/gcc/i386-pc-solaris2.11/4.4.0
-L/usr/local/gcc4/lib/gcc/i386-pc-solaris2.11/4.4.0/../../.. ppl_lpsol.o
dummy.o /usr/local/lib/libglpk.so -lz   ../../interfaces/C/.libs/*.o   
/usr/share/src/ppl-build/src/.libs/libppl.so /usr/local/lib/libstdc++.so
/usr/local/lib/libgmpxx.so /usr/local/gcc4/lib/libstdc++.so
/usr/local/lib/libgmp.so -rpath /usr/local/lib -rpath /usr/local/gcc4/lib
-lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc
/usr/local/gcc4/lib/gcc/i386-pc-solaris2.11/4.4.0/crtend.o /usr/lib/crtn.o
GNU ld (GNU Binutils) 2.19.1
  Supported emulations:
   elf_i386_ldso
   elf_i386
   elf_x86_64

Re: [Bug driver/39439] New: The Driver hides undefined reference messages from shared libs (but not object files) in linker phase

2009-03-11 Thread Andrew Thomas Pinski



Sent from my iPhone

On Mar 11, 2009, at 9:27 PM, rob1weld at aol dot com gcc-bugzi...@gcc.gnu.org 
 wrote:



The Driver hides undefined reference messages from shared libs but
not from object files. This seems inconsistent and is not helpful.



Why do you think the driver is doing instead of the linker?


When compiling 'ppl' using the Trunk I'm getting a terse message
about undefined reference to `typeinfo for int'. This is not
particularly useful since the words are common (can't grep for
them) and there is no line number info explaining the location of
the code that causes this issue.

This page may suggest a reason this error occurs:
http://stackoverflow.com/questions/307352/g-undefined-reference-to-typeinfo


I'm calling this an RFE since I desire an increase in verbosity
but there are no doubt arguments favoring this being a Bug.


# gcc -v
Using built-in specs.
Target: i386-pc-solaris2.11
Configured with: ../gcc_trunk/configure --prefix=/usr/local/gcc4
--enable-languages=ada,c,c++,fortran,java,objc,obj-c++ --enable-shared
--disable-static --enable-multilib --enable-decimal-float
--with-long-double-128 --with-included-gettext --disable-stage1- 
checking

--enable-checking=release --with-tune=k8 --with-cpu=k8 --with-arch=k8
--with-gnu-as --with-as=/usr/local/bin/as --with-gnu-ld
--with-ld=/usr/local/bin/ld --with-gmp=/usr/local --with-mpfr=/usr/ 
local

--without-ppl
Thread model: posix
gcc version 4.4.0 20090309 (experimental) [trunk revision 144720]  
(GCC)



# gmake
...
gmake[4]: Entering directory `/usr/share/src/ppl-build/demos/ 
ppl_lpsol'

gcc -DHAVE_CONFIG_H -I. -I../../../ppl/demos/ppl_lpsol -I../..
-I../../interfaces/C  -I/usr/local/include -pedantic -std=gnu89 - 
Werror -g -O3
-fomit-frame-pointer -march=k8 -frounding-math  -W -Wall -MT  
ppl_lpsol.o -MD

-MP -MF .deps/ppl_lpsol.Tpo -c -o ppl_lpsol.o
../../../ppl/demos/ppl_lpsol/ppl_lpsol.c
mv -f .deps/ppl_lpsol.Tpo .deps/ppl_lpsol.Po
/bin/sh ../../libtool --tag=CXX   --mode=link g++  -g -O3 -fomit- 
frame-pointer
-march=k8 -frounding-math  -W -Wall   -o ppl_lpsol ppl_lpsol.o  
dummy.o -lglpk
../../interfaces/C/libppl_c.la -lm -L/usr/local/lib -lgmpxx -L/usr/ 
local/lib

-lgmp -R/usr/local/lib -R/usr/local/lib
libtool: link: g++ -g -O3 -fomit-frame-pointer -march=k8 -frounding- 
math -W
-Wall -o .libs/ppl_lpsol ppl_lpsol.o dummy.o  /usr/local/lib/ 
libglpk.so -lz

../../interfaces/C/.libs/libppl_c.so -L/usr/local/lib
/usr/share/src/ppl-build/src/.libs/libppl.so /usr/local/lib/libstdc+ 
+.so

/usr/local/lib/libgmpxx.so /usr/local/gcc4/lib/libstdc++.so -lm
/usr/local/lib/libgmp.so -Wl,-rpath -Wl,/usr/local/lib -Wl,-rpath
-Wl,/usr/local/gcc4/lib
../../interfaces/C/.libs/libppl_c.so: undefined reference to  
`typeinfo for int'

collect2: ld returned 1 exit status
gmake[4]: *** [ppl_lpsol] Error 1
gmake[4]: Leaving directory `/usr/share/src/ppl-build/demos/ppl_lpsol'


If I run that using -v I get this collect command:

/usr/local/gcc4/libexec/gcc/i386-pc-solaris2.11/4.4.0/collect2 -V -m  
elf_i386

-Y P,/usr/ccs/lib:/usr/lib -Qy -o .libs/ppl_lpsol /usr/lib/crt1.o
/usr/lib/crti.o /usr/lib/values-Xa.o
/usr/local/gcc4/lib/gcc/i386-pc-solaris2.11/4.4.0/crtbegin.o -L/usr/ 
local/lib

-L/usr/local/gcc4/lib/gcc/i386-pc-solaris2.11/4.4.0
-L/usr/local/gcc4/lib/gcc/i386-pc-solaris2.11/4.4.0/../../..  
ppl_lpsol.o

dummy.o --verbose /usr/local/lib/libglpk.so -lz
../../interfaces/C/.libs/libppl_c.so
/usr/share/src/ppl-build/src/.libs/libppl.so /usr/local/lib/libstdc+ 
+.so

/usr/local/lib/libgmpxx.so /usr/local/gcc4/lib/libstdc++.so
/usr/local/lib/libgmp.so -rpath /usr/local/lib -rpath /usr/local/ 
gcc4/lib

-lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc
/usr/local/gcc4/lib/gcc/i386-pc-solaris2.11/4.4.0/crtend.o /usr/lib/ 
crtn.o



If I run that then I get this simple and useless output:

../../interfaces/C/.libs/libppl_c.so: undefined reference to  
`typeinfo for int'

collect2: ld returned 1 exit status


If I run that exact same command but make a simple alteration:
- ... -lz ../../interfaces/C/.libs/libppl_c.so
+ ... -lz ../../interfaces/C/.libs/*.o

I can use the Object files that were used to create the Shared Library
instead of using the Shared Library. This is useful (due to this
Bug or needed RFE) since the error messages printed are by _far_ more
useful, see:

# /usr/local/gcc4/libexec/gcc/i386-pc-solaris2.11/4.4.0/collect2 -V - 
m elf_i386

-Y P,/usr/ccs/lib:/usr/lib -Qy -o .libs/ppl_lpsol /usr/lib/crt1.o
/usr/lib/crti.o /usr/lib/values-Xa.o
/usr/local/gcc4/lib/gcc/i386-pc-solaris2.11/4.4.0/crtbegin.o -L/usr/ 
local/lib

-L/usr/local/gcc4/lib/gcc/i386-pc-solaris2.11/4.4.0
-L/usr/local/gcc4/lib/gcc/i386-pc-solaris2.11/4.4.0/../../..  
ppl_lpsol.o

dummy.o /usr/local/lib/libglpk.so -lz   ../../interfaces/C/.libs/*.o
/usr/share/src/ppl-build/src/.libs/libppl.so /usr/local/lib/libstdc+ 
+.so

/usr/local/lib/libgmpxx.so /usr/local/gcc4/lib/libstdc++.so
/usr/local/lib/libgmp.so -rpath /usr/local/lib -rpath /usr/local/ 
gcc4/lib

-lstdc++ -lm