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