2011-08-18 53 views
0

我繼續前進,並通過llvm-gcc -emit-llvm -c將現有的c代碼編譯爲llvm位代碼。 C程序由四個模塊組成,每個模塊都通過llvm-ld構建成一個大碼位。然後,我試圖通過llvm-ld GE.bc GA.bc SD.bc SH.bc -o prog合併這4個位碼文件,其中沒有任何投訴。 試圖執行位碼,雖然它抱怨: LLVM錯誤:程序使用外部函數'myFunction',它無法解決!LLVM位代碼找不到函數

事情是myFunction應該在SD.bc中定義,也可以在GA.bc中使用。 但它沒有在SD.bc中找到 - llvm-ld跳過了所有未使用的定義!?

我的操作系統是Linux,我使用llvm版本2.6。

+0

它真的是GA.bc中的一個聲明,定義在SD.bc中嗎?什麼'llvm-dis'顯示?您必須以依賴性順序將位代碼文件和庫提供給'llvm-ld'。 –

+0

在文件_SD1.bc_中有'define void @myFunction(i32%exitCode)nounwind {'但在_SD.bc_中沒有這樣的行! – abergmeier

+0

看起來像* -link-as-library *不足以保存符號。當還指定選項* -disable-opt *時,它保留該功能。很混亂。 – abergmeier

回答

1

作爲一個說明llvm在版本2.9與3.0接近。你應該真的升級。

+0

同意。 LLVM正在迅速改變 - 恕我直言,在偉大的方向:)。 –