我繼續前進,並通過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。
它真的是GA.bc中的一個聲明,定義在SD.bc中嗎?什麼'llvm-dis'顯示?您必須以依賴性順序將位代碼文件和庫提供給'llvm-ld'。 –
在文件_SD1.bc_中有'define void @myFunction(i32%exitCode)nounwind {'但在_SD.bc_中沒有這樣的行! – abergmeier
看起來像* -link-as-library *不足以保存符號。當還指定選項* -disable-opt *時,它保留該功能。很混亂。 – abergmeier