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

Jakub Bogusz qboosh w pld.org.pl
Pon, 2 Wrz 2002, 11:25:49 CEST


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
$

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


-- 
Jakub Bogusz



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