Perhatikan bahwa not stripped
tidak menyiratkan simbol debug.
Kode perpustakaan:
//myshared.c
#include <stdio.h>
void print_from_lib()
{
printf("Printed from shared library\n");
}
Mengkompilasi dengan dan tanpa flag debug:
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
Memeriksa dengan 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
Keduanya mengklaim mereka tidak dilucuti. Namun hanya libmyshared-g.so
menunjukkan simbol:
$ 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
Anda dapat menggunakan perintah file untuk melihat apakah sebuah file adalah stripped
. Pada dasarnya, ini berarti simbol debug ada atau tidak.
Ini satu file dari sistem saya:
$ file libjsd.so
libjsd.so: ELF 32-bit LSB shared object, \
Intel 80386, version 1 (SYSV), dynamically linked,
stripped
Perhatikan yang dilucuti.
Ini sesuatu yang saya kompilasi:
$ 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
lihat 'tidak dilucuti', yang menunjukkan ia memiliki simbol debug.
Dimungkinkan juga untuk memisahkan simbol debug dari objek bersama itu sendiri menggunakan objcopy. Ini akan mengekstrak simbol di file lain dan kemudian Anda perlu mengetahui tautan untuk mendapatkannya kembali. Anda dapat melihat petunjuk untuk melakukan ini dengan gdb menggunakan build-id. Ini berguna jika Anda ingin mengirimkan sesuatu tanpa simbol, tetapi kemudian dapat men-debug-nya dalam keadaan darurat dari dump.