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 check the *.so file format
the info about *.so file
execute cmd:
$ file libd*.so
libd*.so: elf 32-bit lsb shared object, arm, eabi5 version 1 (sysv), dynamically linked, buildid[md5/uuid]=*, stripped
在centos 6.2下用file命令檢視檔案資訊的時候,顯示如下:
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庫會大很多.
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.o123
用gcc把hello.c編譯成目標檔案hello.o
**:$:
strip hello
.o
1
用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屬性理解
file命令not stripped unix下 o和 so檔案顯示的stripped和not stripped是什麼意思?表示符號表是否被清除.在centos 6.2下用file命令檢視檔案資訊的時候,顯示如下 libcom err.so.2 elf 64 bit lsb shared objec...