Beachten Sie, dass not stripped
impliziert keine Debug-Symbole.
Bibliothekscode:
//myshared.c
#include <stdio.h>
void print_from_lib()
{
printf("Printed from shared library\n");
}
Kompilieren mit und ohne Debug-Flags:
gcc -c -Wall -Werror -fpic myshared.c
gcc -shared -o libmyshared.so myshared.o
gcc -g -c -Wall -Werror -fpic myshared.c -o myshared-g.o
gcc -g -shared -o libmyshared-g.so myshared-g.o
Überprüfung mit file
$ file libmyshared.so
libmyshared.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=1ad3b94d5c8a7392c2140a647254753221a152cd, not stripped
$ file libmyshared-g.so
libmyshared-g.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=0268eaf97e5a670d2f7e767a011be6f06a83090a, not stripped
Beide behaupten, sie seien nicht gestrippt. Allerdings nur libmyshared-g.so
zeigt die Symbole:
$ objdump --syms libmyshared.so | grep debug
$ objdump --syms libmyshared-g.so | grep debug
0000000000000000 l d .debug_aranges 0000000000000000 .debug_aranges
0000000000000000 l d .debug_info 0000000000000000 .debug_info
0000000000000000 l d .debug_abbrev 0000000000000000 .debug_abbrev
0000000000000000 l d .debug_line 0000000000000000 .debug_line
0000000000000000 l d .debug_str 0000000000000000 .debug_str
Sie können den Dateibefehl verwenden, um zu sehen, ob eine Datei stripped
ist . Grundsätzlich bedeutet dies, dass die Debugging-Symbole vorhanden sind oder nicht.
Hier ist eine Datei von meinem System:
$ file libjsd.so
libjsd.so: ELF 32-bit LSB shared object, \
Intel 80386, version 1 (SYSV), dynamically linked,
stripped
Beachten Sie die gestrippten.
Hier ist etwas, das ich zusammengestellt habe:
$ file libprofile_rt.so
libprofile_rt.so: ELF 64-bit LSB shared object, x86-64,
version 1 (SYSV), dynamically linked,
BuildID[sha1]=0x..., not stripped
siehe 'not stripped', das anzeigt, dass es Debugging-Symbole hat.
Es ist auch möglich, Debug-Symbole mit objcopy vom gemeinsam genutzten Objekt selbst zu trennen. Dies würde Symbole in einer anderen Datei extrahieren und dann müssten Sie den Link kennen, um sie zurückzubekommen. Sie können Anweisungen dazu mit gdb unter Verwendung von build-ids sehen. Dies ist hilfreich, wenn Sie etwas ohne die Symbole ausliefern möchten, es dann aber im Handumdrehen aus einem Dump heraus debuggen können.