linux 動態庫檔案stripped屬性理解

2021-09-29 13:26:16 字數 1495 閱讀 7278

【file命令not stripped】

unix下*.o和*.so檔案顯示的stripped和not stripped是什麼意思?

表示符號表是否被清除.

在centos 6.2下用file命令檢視檔案資訊的時候,顯示如下:

libcom_err.so.2:      elf 64-bit lsb shared object, x86-64, version 1 (sysv), dynamically linked, stripped

libcrypto.so.10:      elf 64-bit lsb shared object, x86-64, version 1 (sysv), dynamically linked, stripped

libcrypt.so.1:        elf 64-bit lsb shared object, x86-64, version 1 (sysv), dynamically linked (uses shared libs), for gnu/linux 2.6.18, not stripped

libc.so.6:            elf 64-bit lsb shared object, x86-64, version 1 (sysv), dynamically linked (uses shared libs), for gnu/linux 2.6.18, not stripped

libdl.so.2:           elf 64-bit lsb shared object, x86-64, version 1 (sysv), dynamically linked (uses shared libs), for gnu/linux 2.6.18, not stripped

第乙個最後顯示的是stripped,第二個是not stripped。而且對於同樣名字的動態庫,帶not stripped庫會大很多。

例如:**:

$:gcc -c hello.c 

$:ls hello.c hello.o

用gcc把hello.c編譯成目標檔案hello.o

**:$:strip hello.o

用strip去掉hello.o中的符號資訊。

**:$:gcc hello.o /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/crtn.o –o hello

$:gcc hello.o /usr/lib/gcc/i686-pc-linux-gnu/3.4.5/../../../crt1.o7

: in function `_start'

: init.c: (.text+0x18) 

: undefined reference to `main' collect2

: ld returned 1 exit status

再用gcc連線時,聯結器ld報錯。說明在目標檔案中的符號起著很重要的作用,如果要發布二進位制的程式的話,在debug後為了減小可執行檔案的大小,可以用strip來除去符號資訊但是在程式的除錯階段還是不要用strip為好。

靜態庫不要strip

根據strip的功能表示,strip經常用來去除目標檔案中的一些符號表 除錯符號表資訊,減少包的大小.我自己做了一函式庫,同樣的 生成了乙個mylib.so和乙個mylib.a檔案,之後使用了 strip mylib.so 和 strip mylib.a 這兩條命令去除一些符號表和除錯符號表資訊,感...

linux 動態庫檔案stripped屬性理解

在centos 6.2 下用file 命令檢視檔案資訊的時候,顯示如下 libcom err.so.2 elf 64 bit lsb shared object,x86 64,version 1 sysv dynamically linked,stripped libcrypto.so.10 elf...

linux 動態庫檔案stripped屬性理解

build error as below objcopy out target product obj shared libraries libd intermediates stux can t add section gnu debugdata file in wrong format then...