linux 動態庫檔案stripped屬性理解

2021-06-05 18:01:29 字數 2092 閱讀 5086

在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編譯的時候加上除錯資訊的形式呢?

檔案格式與動態鏈結庫」的部落格裡我們可以找到答案。

a.out和

elf(

executable and linking format

)。這兩種格式中都有符號表(

symbol table

),其中包括所有的符號(程式的入口點還有變數的位址等等)。在

elf格式中符號表的內容會比

a.out

格式的豐富的多。但是這些符號表可以用 

strip

工具去除,這樣的話這個檔案就無法讓

debug

程式跟蹤了,但是會生成比較小的可執行檔案。

a.out

檔案中的符號表可以被完全去除,但是 

elf中的在載入執行時起著重要的作用,所以用

strip

永遠不可能完全去除

elf格式檔案中的符號表。但是用

strip

命令不是完全安全的,比如對未連線的目標檔案來說如果用

strip

去掉符號表的話,會導致聯結器無法連線。

例如:

**:$: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屬性理解

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...

linux 動態庫檔案stripped屬性理解

file命令not stripped unix下 o和 so檔案顯示的stripped和not stripped是什麼意思?表示符號表是否被清除.在centos 6.2下用file命令檢視檔案資訊的時候,顯示如下 libcom err.so.2 elf 64 bit lsb shared objec...