我建立使用GCC 3.4.0的可執行文件。目標是嵌入式系統。我一直在使用一種模塊化的方式來定義「控制檯命令處理程序」,方法是在任何編譯單元中定義一個指向處理程序的函數指針,使其位於某個鏈接器部分。在運行時,當在控制檯上輸入一條命令時,我可以循環遍歷「控制檯處理程序數據部分」中的所有處理程序,而無需具有對每個處理程序的引用的中央表。鏈接拋出未定義的符號
聰明機靈的權利,以及現在它咬我。當我在沒有其他外部引用符號的c文件中執行此操作時(例如,我的處理程序是唯一的函數),鏈接程序將其全部拋出。我的處理程序不包含在最終的可執行文件中,編譯單元中也沒有其他任何東西。
- 黑客是在c文件中定義一個虛擬的全局變量,並在別處引用它,然後我的處理程序在它的特殊數據部分,包括在內。
- 我還可以用-u到鏈接器和它的作品,但吹模塊化的目標。
- 我使用我的回調屬性((使用)),沒有運氣嘗試 - 似乎被忽略。
- 我的特殊部分有KEEP規範,但這樣做沒有幫助。
任何想法?
感謝, 庫爾特
感謝您的回覆。不幸的是,我相信所有這些選項都需要明確命名每個函數指針,以便將它保存在二進制文件中。這就損害了模塊化的鏈接器部分的目的,否則我只會製作一箇中央表格並完成它。 我真的需要一些方法來告訴它永遠不會扔掉鏈接到某個部分的符號。 –