2016-05-01 111 views
1

我正在做一個包括編寫makefile的項目。這裏我有兩個不同的makefile。第一個是完成最初的構建步驟。在第二個makefile中,我試圖使用最初生成的對象文件(提供的路徑),並在其他位置添加另外一個生成的其他對象文件。我在這裏遇到的問題是鏈接器無法將這個新的對象文件鏈接到較舊的對象文件。Makefile鏈接器無法鏈接其中一個目標文件

我正在使用此命令來執行此步驟。

arm-none-eabi-g++ -T ../linker.ld -nostartfiles -Xlinker --gc-sections -Wl,-Map,"map_file.map" -specs=nano.specs -o "target.elf" new_file.o all_older_files.o 

這裏new_file.o是arm_eabi版本0和all_older_files.o是arm_eabi版本5.但是,這不是給我任何錯誤或警告。而且,有趣的是,new.file.o中的一些符號被包含在target.elf文件中。我已檢查並檢查鏈接描述文件,但無法找到解決方案,並檢查eabi版本是否有所作爲,但如果我使用elf編輯器手動編輯elf文件,情況也是如此。

我想要的是我需要在這個target.elf中包含new_file.o中的部分,以便我可以使用這些。

+0

首先,您爲什麼需要兩個makefiles?你不是,上帝禁止,遞歸地調用從另一個makefile生成一個文件? –

+0

我很困惑 - 你說鏈接器沒有提供任何錯誤,成功地生成了一個輸出ELF,並且表示鏈接的ELF包含來自輸​​入對象的東西 - 確切地說是「無法鏈接」的方式?這聽起來更像是你的鏈接腳本只是丟棄了比你想要的更多,但是不知道腳本是幹什麼的,以及對象實際上包含哪些部分,誰可以說呢?或者,「失蹤」部分根本就沒有被其他任何東西引用,所以它會把它們扔掉 - 因爲你告訴它。這和makefile有什麼關係呢? – Notlikethat

+0

@MarkGaleck在我的項目中,第一個make文件就像eclipse中的auto-gen makefile,因爲我使用的是基於eclipse IDE的C項目。第二個makefile是在Post_Build選項中設置的,我用它來生成我的項目中需要的其他文件。我不想編輯自動生成文件或修改項目設置。 – codelock

回答

0

我想我得到了這個。謝謝@Notlikethat,你的見解幫助了我。我發現「 - gc-sections」忽略了沒有引用的符號和部分。

但是,當我第一次嘗試這種方式時,這些部分被大內存部分關閉,並且認爲這不是解決方案。但是,後來我已經注意到,最初的自動生成文件也在刪除未使用的部分。所以我不得不在eclipse項目設置中禁用它,然後在我的makefile中刪除這個標誌。這放置了它應該在的部分。

非常感謝你,這爲我節省了大量的時間,因爲我正在爲此花費超過需要的時間。