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

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


On Mon, Sep 02, 2002 at 11:25:49AM +0200, Jakub Bogusz wrote:
> On Mon, Sep 02, 2002 at 11:01:34AM +0200, Michal Moskal wrote:
> > On Sun, Sep 01, 2002 at 08:20:23PM +0200, Jakub Bogusz wrote:
> > > Ź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?
> 
> W gcc 2.95 tak nie jest.
> Napisałem któtkiego maina z wywołaniem inflate() (z biblioteki zlib).
> Teraz:
> 
> $ cc -o d d.c
> /home/users/qboosh/tmp/ccbvLCE1.o: In function `main':
> /home/users/qboosh/tmp/ccbvLCE1.o(.text+0x7): undefined reference to `inflate'
> collect2: ld returned 1 exit status
> $ cc -o d d.c -lpng
> $

Ooops, a IMHO powinno ;) To pewnie zależy od binutils.

> 
> Ale jak pisałem ten akapit to się spieszyłem i trochę namieszałem.
> Chodziło mi przede wszytskim o przypadek, kiedy jest biblioteka napisana
> w C++ (zlinkowana z libstdc++), i linkuje się z nią program w czystym C
> (bez żadnych przejściówek w C++ - interfejs jest z extern "C").
> gcc 2.95 w takim przypadku dodaje kawałek kodu z libgcc.a - wygląda na
> to, że po linkowaniu biblioteki najpierw próbuje uzupełniać brakujące
> symbole tymi z libgcc.a, a dopiero potem sprawdza inne biblioteki
> z którymi zlinkowana jest dana biblioteka...

Tak czy siak problem w gcc3 jest rozwiązany bo libstdc++ jest zlinkowane
z libgcc_s.so.

-- 
: 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