私はx86ライブラリにコンパイルされたライブラリ、すなわち共有ライブラリ(つまり* .so)を持っており、それらがデバッグシンボルでコンパイルされているかどうかを(-g/debugビルドオプションで)素早く判断したいと思います。与えられた共有ライブラリを知るにはデバッグシンボルでビルドされているかどうか?
どうすれば確認できますか?
私はx86ライブラリにコンパイルされたライブラリ、すなわち共有ライブラリ(つまり* .so)を持っており、それらがデバッグシンボルでコンパイルされているかどうかを(-g/debugビルドオプションで)素早く判断したいと思います。与えられた共有ライブラリを知るにはデバッグシンボルでビルドされているかどうか?
どうすれば確認できますか?
fileコマンドを使用して、ファイルがstripped
であるかどうかを確認できます。基本的に、これはデバッグシンボルがそこにあることを意味します。
$ file libjsd.so
libjsd.so: ELF 32-bit LSB shared object, \
Intel 80386, version 1 (SYSV), dynamically linked,
stripped
お知らせ剥奪:
はここに私のシステムから1つのファイルです。
$ 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
はそれはそれはデバッグシンボルをしたことを示し、「取り除かない」を参照してください。
は、ここで私がコンパイル何か。
objcopyを使用して、共有オブジェクト自体からデバッグシンボルを分離することもできます。これは、別のファイルのシンボルを抽出し、それらを元に戻すためにリンクを知る必要があります。 build-idsを使用してdoing this with gdbの手順を見ることができます。これはシンボルなしで何かを配送したいが、ダンプからピンチでそれをデバッグできるようにする場合に役立ちます。
異なるファイルlibqt5Gui.so.5.5.1.debugにデバッグシンボルを持つlibQt5Gui.so.5.5.1が表示されますが、ファイルコマンドはlibQt5Gui.so.5.5.1を削除していないことがわかります – Mohit
not stripped
は、デバッグシンボルを意味するわけではありません。
ライブラリコード:
//myshared.c
#include <stdio.h>
void print_from_lib()
{
printf("Printed from shared library\n");
}
とし、デバッグフラグなしでコンパイル:
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
が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
彼らは削除されませんどちらの主張を確認します。ただし、libmyshared-g.so
には記号が表示されます:
$ 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
objdumpファイル名-x | grep 'debug' – starrify
[プログラムがデバッグシンボルでコンパイルされているかどうかをチェックする方法?](http://stackoverflow.com/questions/3284112/how-to-check-if-program-was-compiled-with-デバッグシンボル) –