にオプション-Wl,-M
を追加した後、再コンパイルしますCXXFLAGS
。「 Archive member included... 」を検索します。次の行は、ファイルに含まれているライブラリと、それらを要求した関数を示します。
例:
gcc -std=gnu99 -O0 -Wall -Wextra -Wunused -Wl,-M -c showmmap.c -o showmmap.o
gcc -std=gnu99 -O0 -Wall -Wextra -Wunused -Wl,-M showmmap.o -o showmmap
Archive member included to satisfy reference by file (symbol)
/usr/lib/x86_64-linux-gnu/libc_nonshared.a(elf-init.oS)
/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../x86_64-linux-gnu/crt1.o (__libc_csu_init)
/usr/lib/x86_64-linux-gnu/libc_nonshared.a(fstat.oS)
showmmap.o (fstat)
Discarded input sections
--------8<--snip--->8-----
他のライブラリに引き込まれたものを見つけるために、アーカイブを掘り下げなければなりませんでした。この例では、__libc_csu_initとfstatが、他のアーカイブ メンバーを含めるよう要求した関数であることがわかります。
オプションの出力-Wl,-M
はかなり... 膨大です。出力をファイルにパイプするか、less
ここに示したのは、出力の先頭からのほんの一部です。多くのライブラリ ルーチンが含まれている可能性があることを考えると、出力は長くなるはずです。