gcc /g++を使用してx86/Linuxでビルドされたコードで、未使用の関数(呼び出しが行われていない)を削除しようとしています。gccマニュアルから読んだように、以下のオプションを使用します。
CCFLAGS = -ffunction-sections -fdata-sections -Wl,--gc-sections,--print-gc-sections
Makeコマンドの出力には、以下のようにいくつかの未使用のセクションが削除されたメッセージが表示されます。
/usr/bin/ld: Removing unused section '.text._ZN14myclass30myunusedfuncEPPNS_8device_sE' in file './myproject/x86-linux/release/file1.o'
ただし、念のため、そのシンボルが* .oオブジェクトファイルに存在するかどうかを確認しようとしたので、次のようにします。
strings --all -f file1.o|grep myunusedfunc
以下のような出力が表示されます
myproject/x86-linux/debug/file1.o: [] myclass::myunusedfunc()
myproject/x86-linux/debug/file1.o: myunusedfunc
myproject/x86-linux/debug/file1.o: _ZN14myclass30myunusedfuncEPPNS_8device_sE
myproject/x86-linux/debug/file1.o: .rel.text._ZN14myclass30myunusedfuncEPPNS_8device_sE
myproject/x86-linux/debug/file1.o: _ZN14myclass30myunusedfuncEPPNS_8device_sE
どうしたの?
未使用の関数は、これらのgcc/ldオプションによって実際に削除されていますか。