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

Jakub Bogusz qboosh w pld.org.pl
Nie, 1 Wrz 2002, 14:51:40 CEST


...ssie.
Równie dobrze można statycznie linkować - też nie będzie "zbędnych
zależności".

Właśnie się z czymś takim spotkałem - przykład linkowania biblioteki
w C++ bez użycia libstdc++ (akurat z flash.spec - dorabiam budowanie
dzielonej biblioteki, bo może być używana przez inne programy):

[comp Lib]$ rm libflash.la
[comp Lib]$ make LDFLAGS="-s" CC=gcc
libtool gcc  -s -o libflash.la [...]
gcc -shared [...] -Wl,-soname -Wl,libflash.so.0 -o .libs/libflash.so.0.0.0
[...]
[comp Lib]$ ls -l .libs/libflash.so.0.0.0
-rwxrwxr-x    1 comp     comp       245834 2002-09-01 14:44 .libs/libflash.so.0.0.0
                                    ^^^^^^

[comp Lib]$ rm libflash.la
[comp Lib]$ make LDFLAGS="-s" CC=g++
libtool g++  -s -o libflash.la [...]
g++ -shared -nostdlib /usr/lib/crti.o /usr/lib/gcc-lib/i686-pld-linux/2.95.4/crtbeginS.o [...] -L/usr/lib/gcc-lib/i686-pld-linux/2.95.4 -lstdc++ -lm -lc -lgcc -lc /usr/lib/gcc-lib/i686-pld-linux/2.95.4/crtendS.o /usr/lib/crtn.o  -Wl,-soname -Wl,libflash.so.0 -o .libs/libflash.so.0.0.0
[...]
[comp Lib]$ ls -l .libs/libflash.so.0.0.0
-rwxrwxr-x    1 comp     comp       201753 2002-09-01 14:44 .libs/libflash.so.0.0.0
                                    ^^^^^^

W tym pierwszym przypadku w binarce ląduje kupa symboli C++, pochodzących
z libgcc.a.


Z programami w C++ "nie używającymi" libstdc++ jest dokładnie tak samo.
Narzut około 30kB.


Gorzej, że linkowanie kodu w C przy użyciu gcc z biblioteką zlinkowaną
z libstdc++ daje taki sam efekt :/

[comp Player]$ rm swfplayer
[comp Player]$ make swfplayer LDFLAGS="-s"
gcc -s -o swfplayer main.o -L../Lib -L../Lib/.libs -lflash -lz -ljpeg -L/usr/X11R6/lib -lX11 -lXext
-lm
[comp Player]$ ls -l swfplayer
-rwxrwxr-x    1 comp     comp        45744 2002-09-01 14:05 swfplayer
                                     ^^^^^
[comp Player]$ rm swfplayer
[comp Player]$ make swfplayer LDFLAGS="-s" CC="g++"
g++ -s -o swfplayer main.o -L../Lib -L../Lib/.libs -lflash -lz -ljpeg -L/usr/X11R6/lib -lX11 -lXext
-lm
[comp Player]$ ls -l swfplayer
-rwxrwxr-x    1 comp     comp        11544 2002-09-01 14:06 swfplayer
                                     ^^^^^
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?


-- 
Jakub Bogusz    http://prioris.mini.pw.edu.pl/~qboosh/



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