對不起,如果這個問題很愚蠢,但我已經搜索了一下,沒有發現任何關於此事的信息。是否所有代碼都已編譯幷包含在最終的二進制文件中?
假設我用數百種方法創建類擴展,並將該類包含在我的項目中。現在假設從那個擴展中,我只使用2或3個方法。請記住,類擴展有數百種方法。
當我編譯的代碼什麼將包括在二進制文件?只是我從這個類擴展中使用的方法還是所有這些方法,甚至那些沒有被特定項目使用的方法?
對不起,如果這個問題很愚蠢,但我已經搜索了一下,沒有發現任何關於此事的信息。是否所有代碼都已編譯幷包含在最終的二進制文件中?
假設我用數百種方法創建類擴展,並將該類包含在我的項目中。現在假設從那個擴展中,我只使用2或3個方法。請記住,類擴展有數百種方法。
當我編譯的代碼什麼將包括在二進制文件?只是我從這個類擴展中使用的方法還是所有這些方法,甚至那些沒有被特定項目使用的方法?
這可以分爲三類:
--no-whole-archive
聯--whole-archive
(其他連接器可能有類似的選項)。
該代碼將只包含您正在擴展的庫中的方法名稱。
哎呀......其他類的整個代碼將被包括在內。
只包含您使用的對象文件。我建議,對於大型課程,你儘可能地分割源代碼。
儘管你明確地使用,各自延伸/覆蓋需要像vtable
一些符號的方法。請參閱您的編譯器文檔。
對接受此延遲感到抱歉。感謝你的回答。 – Phox
取決於您使用靜態鏈接還是動態鏈接。在動態鏈接中,只包含使用的符號名稱。在靜態鏈接中,如果使用'--no-whole-archive'等選項,則只包含使用的'.o'文件。否則,將包含整個'.a'文件。另外請注意,不僅會直接使用/覆蓋的方法將被調用。這也是關於vtables和東西。 –
謝謝。請讓這個答案,所以我可以接受。 – Phox