Linkowanie kodu w C++ bez libstdc++...

Michal Moskal malekith w pld-linux.org
Pon, 2 Wrz 2002, 11:01:34 CEST


On Sun, Sep 01, 2002 at 08:20:23PM +0200, Jakub Bogusz wrote:
> On Sun, Sep 01, 2002 at 03:29:05PM +0200, Tomasz Kłoczko wrote:
> > On Sun, 1 Sep 2002, Jakub Bogusz wrote:
> > [..]
> > > W tym pierwszym przypadku w binarce ląduje kupa symboli C++, pochodzących
> > > z libgcc.a.
> > > 
> > [..]
> > > Tak jest w gcc 2.95.4 (pomaga dodanie "-nostdlib /usr/lib/crt1.o" - ale
> > > bez przesady, tak się nie powinno robić).
> > > Może w 3.x to jest poprawione?
> > 
> > Ciekawe w takim razie dlaczego ta część libgcc.a nie trafiła do 
> > libstdc++ ?
> 
> W libstdc++ _też_ to jest. Jeśli _nie_ linkuje się z libstdc++, gcc sam
> statycznie dołącza kod z libgcc.a.
> 
> Źle, że robi to także przy nie bezpośrednim linkowaniu z libstdc++
> (tylko dynamicznie - poprzez bibliotekę zlinkowaną z libstdc++).
> To może być poprawione w gcc 3.x (co objawia się koniecznością używania
> g++ albo linkowania z libstdc++ lub przynajmniej libsupc++, jeżeli
> gdziekolwiek było użyte C++).

Dobrze, że tak robi. Example:

int main()
{
	foo();
}

foo jest zdefniowane w libbar.so, a libbaz.so jest zlinkowane z
libbar.so. Teraz jeśli zrobisz -lbaz przy linkowaniu tego programu (bez
-lbar) to powinieneś dostaś link error, am I right?

Z symbolami z libgcc.a jest tak samo.

Druga sprawa. Jeśli symbole z libgcc.so są zlinkowane dwa razy, raz
statycznie, a raz dynamicznie to AFAIR mogą wystąpić *poważne* problemy
z obsługą wyjątków. Dlatego została wprowadzona libgcc.so w gcc3.

Z sugestią z Subject: natomiast w *pełni* się zgadzam.

-- 
: Michal Moskal ::::: malekith/at/pld-linux.org :  GCS {C,UL}++++$ a? !tv
: PLD Linux ::::::: Wroclaw University, CS Dept :  {E-,w}-- {b++,e}>+++ h



Więcej informacji o liście dyskusyjnej pld-devel-pl