0
這裏是一些C++測試代碼:gcc:如何刪除未使用的未定義符號?
__attribute__((visibility("hidden"))) void foo()
{
int fd = fopen("data1", "rb");
printf ("%d", fd);
}
和其他所有的代碼不調用函數「富」和功能「的fopen」
然後我用gcc選項-ffunction截面編譯代碼到一個這樣的文件。
正如我所想,函數foo符號和foo二進制代碼沒有包含在so文件中。
但問題是,我認爲符號'fopen'不應該是符號表。 ps:我可以確保只有函數'foo'使用'fopen'。 實際上,當我使用命令nm時,我發現'U'型符號'fopen'。
gcc是如何工作的? 並且有gcc其他編譯選項,發現符號'fopen'不用,並且刪除'fopen'符號。
當我添加選項-fwhole程序時,幾乎所有的符號都被刪除。 –
當我添加選項-fwhole程序時,幾乎所有的符號都被刪除了。其實我只是想刪除未使用的符號,並保留使用的符號。我怎樣才能告訴編譯器?我認爲一個聰明的編譯器可以計算符號。如果symbol'count爲0,則該符號將被刪除。 –
他只能刪除它們,因爲它們沒有被使用。如果他在他們仍在使用的時候將他們刪除,你的程序將無法運行。 – flolo