[Bug driver/39439] New: The Driver hides undefined reference messages from shared libs (but not object files) in linker phase
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
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