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