2011-12-28 68 views
5

如何從LLVM的C++端生成可執行的二進制文件?來自LLVM的二進制代碼

我目前正在編寫一個玩具編譯器,我不太清楚如何從IR創建可執行文件的最後一步。

我目前看到的唯一解決方案是寫出位碼,然後使用system或類似的方法調用llc。有沒有辦法從c + +接口做到這一點?

這似乎是一個常見問題,但我找不到任何東西。

回答

3

LLVM不提供執行此任務所需的鏈接器。它只能寫成彙編器,然後調用系統鏈接器來處理它。你可以看到llvm-ld的源代碼,看看它是如何完成的。

+0

謝謝,llvm-ld代碼正是我所需要的。 – cobbal 2011-12-28 03:24:15

+1

如果您閱讀llvm-ld的文檔,它會說它的輸出仍然是字節碼,而不是本地二進制文件。它輸出的字節碼實際上是鏈接的,因爲所有輸入都存在於輸出中。爲了充當LD的替代品,llvm-ld必須生成通常的a.out文件,但它也不是本機可執行文件。它是一個shell腳本,它調用LLVM的lli實用程序,然後執行字節碼(通過其解釋器或通過JIT編譯)。如果你真的想要一個可執行文件,你最終必須編譯你的LLVM IR或字節碼到彙編中,並通過gcc運行它。 – mgadda 2012-02-13 02:16:51