------- Comment #2 from marek dot rouchal at infineon dot com  2006-07-14 09:08 
-------
The test case is the build of gcc 4.0.3 on Solaris 8, including the
libstdc++.so build. When done, run

env LD_LIBRARY_PATH=<path-where-libgcc_s.so-is> ldd -r -v .../libstdc++-IFX.so

and you will see __eprintf unresolved.

I will try to put together a test case to build a shared lib from C source code
that contains #include <assert.h> and some assertion to demonstrate the the
resulting libXXX.so has an unresolved reference to __eprintf.


One more comment: The libstdc++ on Solaris does not have the RUNPATH compiled
in to find the libgcc_s.so, so that is why the _umoddi etc. symbols are not
found. So when running 
env LD_LIBRARY_PATH=/opt/gcc_4.0.3/solaris8/lib ldd -r -v
/opt/gcc_4.0.3/solaris8/lib/libstdc++-IFX.so
I only get the __eprintf unresolved symbol. So the difference between Solaris
and Linux is really that on Solaris there is __eprintf unresolved in
libstdc++.so.
And I noticed another difference: On Solaris, my gcc is using the Solaris ld
linker, and the collect2 call contains (gcc -shared) only -lgcc_s,
whereas on Linux (where GNU ld is used) it contains:
-lgcc --as-needed -lgcc_s-IFX --no-as-needed -lc -lgcc --as-needed -lgcc_s-IFX
--no-as-needed
so link first with the static libgcc.a, then with the shared gcc_s.

I failed to figure out where and how the link lib list is constructed within
gcc (i.e., how the collect2 command line is put together), so I do not know how
to compare that between Solaris and Linux.

-Marek


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28377

Reply via email to